什么是ioc容器?spring中bean的生命周期

本文深入探讨了Spring的IOC容器启动过程,包括配置元数据解析、BeanDefinition的生成与注册,以及BeanFactoryPostProcessor的作用。接着详细阐述了Bean的生命周期,从反射创建、属性注入、Aware检查、BeanPostProcessor增强、初始化方法、后置处理器到销毁过程,全面解析每个阶段的关键点,特别是循环依赖的解决策略。
摘要由CSDN通过智能技术生成

1.什么是ioc容器

ioc容器是用来存放spring中创建的对象,在这里涉及到spring是如何启动ioc容器,怎么生成bean的。

(1)配置元数据,比如我们的xml配置文件,properties配置文件,或者注解

(2)spring读取配置文件需要用到xmlbeandefinition,或者propertiesbeandefinition,或者annotedbeandefinition,通过这些读取之后会统一生成一个叫beandefinition的对象存在于内存中,

(3)生成的对象通过对应一个唯一的id注册到beandefinitionregister里面,移键值对的形式存在

(4)这里还有一个beanfactorypostprocessor处理器,主要是用来替换属性,修改等操作,例如配置的DataSource里面的${username}等属性信息

以上就完成了ioc容器的启动

2.bean的生命周期

ioc容器启动之后,bean的对象创建就开始了,这里就涉及到了bena的生命周期

(1)bean对象额创建,通过反射形式创建bean对象。这里用到了spring的策略设计模式

(2)为了统一对象的管理,spring使用了beanwrapper进行了封装,这里主要是对这个对象进行属性的赋值,setter注入的方式。这里有一个spring解决的经典问题,就是spring是如何解决循环依赖的。为什么spring只能解决setter注入的循环依赖,而不能解决构造的循环依赖。我们看一下循环依赖的解决方式吧。

      1> 循环依赖的生成,就是A对象引用B对象,而B对象又引用A对象,关键是两个对象都没有生成,导致陷入了循环之中。

       2>spring的解决的方式是,引用了三级缓存。一级缓存主要是保存已经创建好的完整的对象,这里的熟悉已经被赋值。二级缓存主要是保存一个提前暴露的对象,这里的属性还没有被赋值,二级缓存主要用于解决循环依赖问题。三级缓存主要是保存代理的对象,即循环依赖的是动态代理创建的对象,我们这里就会使用到三级缓存。

(3)属性注入之后,就是aware的检查,包括applicationcontext容器,beanfactory等等很多的扩展类

(4)然后就是beanpostprocessor,这个主要是用来增强,扩展bean实例的,例如springAop

   (5) 之后就是自定义的初始化逻辑,例如initializingbean

 (6)spring最后还我们留了一个后置处理器,跟前置处理器类型,也是用来增强,修改bean实例

(7)后置处理器执行完成后,就是自定义的销毁逻辑的destory,如配置bean中的DataSource对应的close方法。

(8)以上步骤都执行完成之后,就可以使用我们的对象了

 (9)使用完成之后就是销毁对象

这就是bean的生命周期,简略写了一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值