栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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的生命周期,简略写了一下。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/948840.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号