IOC深度解读

IOC

 IoC理论提出的观点大体是这样的:借助于“第三方”实现具有依赖关系的对象之间的解耦。
 控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

IoC中最基本的Java技术就是“反射”编程.

image

当前比较知名的IoC容器有:Pico Container、Avalon 、Spring、JBoss、HiveMind、EJB等。
“依赖查找”(Dependency Lookup) 
依赖查找也有两种类型:依赖拖拽(DP)和上下文化依赖查找(CDL)。

依赖查找(Dependency Lookup):
    容器中的受控对象通过容器的API来查找自己所依赖的资源和协作对象。
    这种方式虽然降低了对象间的依赖,但是同时也使用到了容器的API,造成了我们无法在容器外使用和测试对象。 依赖查找是一种更加传统的IoC实现方式。
依赖注入(Dependency Injection):
    依赖注入就是将服务注入到使用它的地方。对象只提供普通的方法让容器去决定依赖关系,容器全权负责组件的装配,
    它会把符合依赖关系的对象通过属性(JavaBean中的setter)或者是构造子传递给需要的对象。

IoC容器系列的实现:BeanFactory和ApplicationContext

ClassPathResource res=new ClassPathResource(“beans.xml”);DefaultListableBeanFactory
factory=new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader=new XmlBeanDefinitionReader(factory);
reader.loadBeanDefinitions(res);
    
    这样,我们就可以通过factory对象来使用DefaultListableBeanFactory这个IoC容器了。在使用IoC容器时,需要如下几个步骤:

    1)创建IoC配置文件的抽象资源,这个抽象资源包含了BeanDefinition的定义信息。
    
    2)创建一个BeanFactory,这里使用DefaultListableBeanFactory。
    
    3)创建一个载入BeanDefinition的读取器,这里使用XmlBeanDefinitionReader来载入XML文件形式的BeanDefinition,通过一个回调配置给BeanFactory。
    
    4)从定义好的资源位置读入配置信息,具体的解析过程由XmlBeanDefinitionReader来完成。完成整个载入和注册Bean定义之后,需要的IoC容器就建立起来了。这个时候IoC容器就可以直接使用了。
IoC容器的初始化

IoC容器的初始化包括BeanDefinition的Resouce定位、载入和注册这三个基本的过程。

BeanDefinition的资源定位由ResourceLoader通过统一的Resource接口来完成,这个Resource对各种形式的BeanDefinition的使用提供了统一接口。

第二个关键的部分是BeanDefinition的载入,该载入过程把用户定义好的Bean表示成IoC容器内部的数据结构,而这个容器内部的数据结构就是BeanDefinition,
这个BeanDefinition定义了一系列的数据来使得IoC容器能够方便地对POJO对象也就是Spring的Bean进行管理。

第三个过程是向IoC容器注册这些BeanDefinition的过程。这个过程是通过调用BeanDefinitionRegistry接口的实现来完成的,这个注册过程把载入过程中解析得到的BeanDefinition向IoC容器进行注册。
可以看到,在IoC容器内部,是通过使用一个HashMap来持有这些BeanDefinition数据的。
IoC容器的依赖注入
首先,注意到依赖注入的过程是用户第一次向IoC容器索要Bean时触发的,当然也有例外,也就是我们可以在BeanDefinition信息中通过控制lazy-init属性来让容器完成对Bean的预实例化。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值