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

本文深入浅出地介绍了Spring框架中的IOC容器概念及其工作原理。从IOC容器的基本理解入手,将其比喻为一个装有BeanDefinition的桶,并详细描述了IOC容器的初始化过程及依赖注入的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值