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 Cloud介绍 Part2: Spring Cloud与微服务
- 从源码安装Mysql/Percona 5.5
- springmvc实现url路由功能
- springIOC概念快速入门
- spring aop 无法代理父类方法 的解决方法
- Spring MVC过滤器-超类 GenericFilterBean
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- Spring和ThreadLocal
- Spring Boot 开发微服务
- Spring AOP动态代理-切面
- 使用MVC微信支付返回get_brand_wcpay_request:fail
- Spring整合Quartz(JobDetailBean方式)
- Spring整合Quartz(JobDetailBean方式)
- 浅析Ruby的源代码布局及其编程风格
- asp.net 抓取网页源码三种实现方法
- JS小游戏之仙剑翻牌源码详解
- JS小游戏之宇宙战机源码详解