SpringBean+的生命周期
2025-08-03 12:37:40 0 举报
SpringBean的生命周期是指一个Bean从创建到销毁的整个过程,包括实例化、属性填充、初始化前的准备、初始化以及销毁前的清理。此过程中,核心内容包括:**依赖注入(DI)**,这发生在Bean的属性被填充时;**BeanNameAware和BeanFactoryAware**,这使Bean能够获得其标识和对Factory的引用;**初始化回调(如init-method)**,允许Bean执行如初始化数据库连接等所需的自定义操作;最后是**销毁回调(如destroy-method)**,用于执行清理资源,关闭数据库连接等。Spring容器管理Bean的创建和销毁,因此它确保只有在Bean完全初始化后才允许调用,而在Bean销毁前进行适当清理。 文件类型通常指的是配置文件(XML或Java配置),或是注解修饰语可能是“@PostConstruct”和“@PreDestroy”,这些用于标注Bean的初始化和销毁前后执行的方法。在Spring框架中,Bean的生命周期还可以通过实现特定接口(如InitializingBean和DisposableBean)进行更细致的控制。
作者其他创作
大纲/内容
需要类型转换
BeanClassLoaderAware.setBeanClassLoader()
合并父子 BeangetMergedLocalBeanDefinition()
AbstractAutowireCapableBeanFactory#doCreateBean
构造器注入
父子容器处理
从缓存中获取包装对象
拿到缓存
其他else
不需要
getBean(String name)
factory.getBean(\"user\")
拿到了
处理依赖 BeanregisterDependentBean()
从父容器递归获取 Bean
后面还要仔细研究
BeanNameAware.setBeanName()
转换名称transformedBeanName
Set 注入
第二阶段(属性填充 populateBean)
初始化
单例对象
注册 DisposableBean
AbstractBeanFactory#doGetBean
创建包装对象createBeanInstance
Spring 容器注入
存在父容器&&当前容器不存在 Bean 定义
检查是否需要提前曝光
factory.getBean(\"user\
避免循环依赖
没拿到缓存
BeanPostProcessor 加工
从单例缓冲池获取getSingleton
第三阶段(初始化 initializeBean)
标记 Bean 为被创建alreadyCreated.add(beanName)
需要
BeanPostProcessor后置处理
AbstractBeanFactory
否
InitializingBean.afterPropertiesSet()
得到 Bean 对象
*Aware.setXXX() ...
...
实例化对象(反射)
是
BeanPostProcessor前置处理
三级缓存机制1. singletonObjects:默认使用的缓存,存储完全初始化好的单例 Bean 实例2. earlySingletonObjects:用于存储尚未完全初始化的 Bean 实例3. singletonFactories:用于存储 bean 的工厂实例
容器关闭
结束
第一阶段(创建实例 createBeanInstance )
根据作用域创建 Bean
获取 BeangetObjectForBeanInstance
返回 Bean
正常 Bean 直接返回如果是 FactoryBean 则返回 FactoryBean.getObject()
属性填充
init-method
afterPropertiesSet
1. 如果传入的 name 就是 ID,直接返回2. 如果传入的 name 是别名,转换 ID 返回3. 如果以 & 为前缀(获取 FactoryBean 类型),去掉 &,转换 ID 返回
单例singleton
再次检查是否存在循环依赖
原型prototype
DisposableBean.destroy()
对象创建完毕可以使用
destroy-method
BeanFactoryAware.setBeanFactory()
是否有缓存
执行 MergedBeanDefinitionPostProcessor 后置处理器
0 条评论
下一页