您的位置:首页 > 编程语言 > Java开发

IOC容器的初始化与依赖注入过程

2017-01-08 20:38 519 查看

IOC容器个人理解

终于有闲暇时间对Spring的源码展开攻势:

IOC容器到底是个什么东西

1.我把它看做是一个桶,具体例子有(XMLBeanDefinition、ApplicationContext)这两个都是IOC容器的具体实现。

2.这个桶implements接口BeanFactory.桶里面持有一个HashMap装的是BeanDefinition。

我理解的IOC容器的实现过程

1.初始化一个接口BeanFactory的实现

2.初始化一个Resource

3.初始化一个BeanDefinitionReader来与BeanFactory的实现装配。

4.通过装配后的BeanDefinitionReader来去读取resource

例如XmlBeanFactory:初始化XmlBeanDefinitionReader需要一个Resource对象(XML文件中的BeanDefinition)来读取,这个Resource对象在代码中是这么定义的 ClassPathResource resource = new ClassPathR(“XML文件的路径”);

再从类的角度去理解一下IOC容器的初始化过程

1.获取BeanDefinition

AbstractBeanDefinitionReader 是 XmlBeanDefinitionReader的父类

调用loadBeanDefinition()方法来加载BeanDefinition。

该方法(loadBeanDefinition())会有两个过程:

1.document会被解析成BeanDefinitionParseDelegate(Class).

2.创建DefaultBeanDefinitionDocumentReader来解析成为springIOC容器需要的BeanDefinition

注:BeanDefinition包括了被依赖的对象的别名、ID等等信息。

2.把获取到的BeanDefinition注册到IOC容器的HashMap里面去

1.在DefaultListtableBeanFactory中实现了BeanDefinitionRegistry接口。

在完成BeanDefinition的注册之后IOC容器的初始化就此完成。

以来完成之后就是注入的过程了。在IOC容器中的BeanDefinition是怎么注入的呢。

1.注入由AbstractAutowireCapableBeanFactory中的方法populateBean()方法完成(包括了对autoware属性的处理)

2.在该方法中通过BeanDefinitionResolver来对BeanDefinition进行解析,并注入到property中

3.至此完成IOC容器的初始化以及依赖注入。



1.具体的BeanWrapper的setPropertyValues.

2.在IOC容器初始化完成之后,可以通过lazy-init属性来设置是否立即进行依赖注入。lazy-init属性定义在BeanDefinition中。

3.IOC容器的后置监听器BeanPostProcessor.

至此是IOC容器的初始化以及依赖注入的过程简单描述。具体细节描述待日后更新。

晚安世界。O(∩_∩)O!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring 源码 ioc