WEB开发网
开发学院网络安全安全技术 对依赖注入技术的初学指导 阅读

对依赖注入技术的初学指导

 2008-09-20 13:26:20 来源:WEB开发网   
核心提示: 值得注意的依赖关系如下:AirlineAgency和CabAgency是代表相应服务的接口程序,CabAgency需要对AirlineAgency有一个引用才能完成它的功能,对依赖注入技术的初学指导(5), TripPlanner是一个在与AirlineAgency和CabAgency结合

值得注意的依赖关系如下:

AirlineAgency和CabAgency是代表相应服务的接口程序。CabAgency需要对AirlineAgency有一个引用才能完成它的功能。

TripPlanner是一个在与AirlineAgency和CabAgency结合起来后来完成旅行计划的接口程序。TripPlanner需要对AirlineAgency和CabAgency的引用。

基于源代码的UML图如下所示:

对依赖注入技术的初学指导

在各个不同框架下应注意到的显著的差别是:

harness类里的configure()和getPlanner()方法

接口和实施类的关系是如何描述的(有的使用Java,有的使用XML文件)

不同服务组件间的依赖关系是如何声明的(有的使用XML文件,有的使用constructor,有的使用setter的方法)

其他的需求期望(比如说,xwork里的接口推动者-enabler interfaces)

无容器实施

对于无容器实施而言,无一定之规。一些实施会做服务组件的查询(比如JNDI)或建立一组工厂的接口程序(可能通过单态模式来实施)。在我们这个case里,我选择的是首先从属性文件里读取类名,然后使用映射的方式来将各服务组件里的对象实例化。

属性文件如下(只有类名):

airline-agency-class = com.dnene.ditutorial.common.impl.SimpleAirlineAgency
cab-agency-class = com.dnene.ditutorial.common.impl.ConstructorBasedCabAgency

用来实例化AirlineAgency,CabAgency,和TripPlanner的源代码如下:

AirlineAgency airlineAgency = null;
CabAgency cabAgency = null;
TripPlanner tripPlanner = null;
// Get class names from property file
InputStream propertyFile = getClass().getClassLoader().
    getResourceAsStream("nocontainer-agency.properties");
Properties properties = new Properties();
properties.load(propertyFile);
Class airlineAgencyClass = Class.forName
      (properties.getProperty("airline-agency-class"));
Class cabAgencyClass = Class.forName
       (properties.getProperty("cab-agency-class"));
Class tripPlannerClass = Class.forName
        (properties.getProperty("trip-planner-class"));
if (AirlineAgency.class.isAssignableFrom(airlineAgencyClass))
{
    // Instantiate airline agency
   airlineAgency = (AirlineAgency) airlineAgencyClass.newInstance();
}
if (CabAgency.class.isAssignableFrom(cabAgencyClass))
{
    // Instantiate CabAgency, and satisfy its dependency on an airlineagency.
 Constructor constructor = cabAgencyClass.getConstructor
      (new Class[]{AirlineAgency.class});
    cabAgency = (CabAgency) constructor.newInstance
      (new Object[]{airlineAgency});
} 
if (TripPlanner.class.isAssignableFrom(tripPlannerClass))
{
  Constructor constructor = tripPlannerClass.getConstructor
     (new Class[]{AirlineAgency.class,CabAgency.class});
    tripPlanner = (TripPlanner) constructor.newInstance
        (new Object[]{airlineAgency,cabAgency});
}
return tripPlanner;

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:依赖 注入 技术

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接