您的位置:首页>软件开发>软件架构>

对Spring中接口注入的理解实例分析 (1)

[ 来源:赛迪博客 | 更新日期:2007-7-15 20:16:14 | 评论 0 条 | 我要投稿 ]
  Type1 接口注入
  
  我们常常借助接口来将调用者与实现者分离。如:
  public class ClassA {
  private InterfaceB clzB;
  public init() {
  Ojbect obj =
  Class.forName(Config.BImplementation).newInstance();
  clzB = (InterfaceB)obj;
  }
  ……
  }
  
  上面的代码中,ClassA依赖于InterfaceB的实现,如何获得InterfaceB实现类的实例?传统的方法是在代码中创建InterfaceB实现类的实例,并将起赋予clzB.
  
  而这样一来,ClassA在编译期即依赖于InterfaceB的实现。为了将调用者与实现者在编译期分离,于是有了上面的代码,我们根据预先在配置文件中设定的实现类的类名,动态加载实现类,并通过InterfaceB强制转型后为ClassA所用。
  
  这就是接口注入的一个最原始的雏形。
  

字串3


  而对于一个Type1型IOC容器而言,加载接口实现并创建其实例的工作由容器完成,如J2EE开发中常用的Context.lookup(ServletContext.getXXX),都是Type1型IOC的表现形式。
  
  Apache Avalon是一个典型的Type1型IOC容器。
  
  Type2 构造子注入
  
  构造子注入,即通过构造函数完成依赖关系的设定,如:
  public class DIByConstructor {
  private final DataSource dataSource;
  private final String message;
  public DIByConstructor(DataSource ds, String msg) {
  this.dataSource = ds;
  this.message = msg;
  }
  ……
  }
  
  可以看到,在Type2类型的依赖注入机制中,依赖关系是通过类构造函数建立,容器通过调用类的构造方法,将其所需的依赖关系注入其中。
  

字串7


  PicoContainer(另一种实现了依赖注入模式的轻量级容器)首先实现了Type2类型的依赖注入模式。



Tags:
责任编辑:
您的评论
用户名: 新注册) 密码: 匿名评论 [所有评论]

·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为