IoC/DI,控制反转和依赖注入

控制反转(IoC:Inversion of Control):
应用本身不负责依赖对象的创建与维护,而是由外部容器负责(IOC容器)。就是说控制权由应用转移到外部容器。控制权的转移就是所谓的反转。 控制反转一般分为两种类型, 依赖注入(Dependency Injection,简称DI)(流行)和依赖查找(Dependency Lookup)(不流行)。

依赖注入(DI:Dependency Injection):
在运行期,由外部容器动态地将对象注入到组件中。如下(注入personDao):
[java]  view plain copy
  1. public class PersonServiceBean{  
  2.     //PersonDao是一个接口,使用XML配置或注解可以注入一个实现类的实例  
  3.     @Autowired  
  4.     public PersonDao personDao;   
  5. }  

如果不采用依赖注入,则必须这样:
[java]  view plain copy
  1. public PersonDao personDao = new PersonDaoBean();   
这样的话Service和Dao是紧密耦合的。使用Spring可以把他们解耦,而且可以注入任何实现PersonDao的类,而不仅限于PersonDaoBean,要更改注入的实现类可以方便的通过XML配置文件来实现。

依赖注入有三种方式:
  • 接口注入(Interface Injection)
  • 设值注入(Setter Injection): IoC 容器使用属性的 setting 方法来注入被依赖的实例
  • 构造注入(Constructor Injection):利用构造器来设置依赖关系

Spring IoC/DI的过程:
  1. 遍历所有被注解的类和配置文件,为被注解或配置的类创建实例bean
  2. 再次遍历这些被注解的类和配置文件,如果发现某个bean里面的某个成员被注解或配置为需要注入,则为其注入相应的bean
  3. 默认地,这些bean都是单例的

依赖查找:
例子:
[java]  view plain copy
  1. public class MyBusniessObject{  
  2.   private DataSource ds;  
  3.   private MyCollaborator myCollaborator;  
  4.    
  5.   public MyBusnissObject(){  
  6. Context ctx = null;  
  7. try{  
  8.     ctx = new InitialContext();  
  9.     ds = (DataSource) ctx.lookup(“java:comp/env/dataSourceName”);  
  10.     myCollaborator = (MyCollaborator) ctx.lookup(“java:comp/env/myCollaboratorName”);  
  11.     }……  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值