Spring Bean 的生命周期笔记
1.加载Bean定义
通过 loadBeanDefinitions 扫描所有xml配置、注解将Bean记录在beanDefinitionMap中
2.创建Bean对象
通过 createBean 遍历 beanDefinitionMap 创建bean
2.1.构建对象
- 容器通过 createBeanInstance 进行对象构造
2. 获取构造方法:@Autowired - 准备参数 根据类查找>参数名查找
- 构造对象
- 无参对象直接实例化
2.2.填充属性
通过populateBean方法为Bean内部所需的属性进行赋值
- 通常是 @Autowired 注解的变量
2.3.初始化Bean对象
通过initializeBean对填充后的实例进行初始化
填充初始化容器相关信息
通过 **invokeAwareMethods **方法:为实现aware接口【信息感知接口】的Bean 设置注入beanName、beanFactory等容器信息
初始化构造方法
通过 **invokeInitMethods **方法进行初始化:
如果Bean实现InitializingBean接口进行处理【未实现则不进行】
- afterPropertiesSet方法【bean填充属性后执行】
- initMethod 方法
Bean的后置处理
在**invokeInitMethods **的前后进行
- applyBeanPostProcessorsBeforeInitialization
- **invokeInitMethods **
- applyBeanPostProcessorsAfterInitialization
在后置处理中处理了包括:AOP【AnnotationAwareAspectJAutoProxyCreator】
负责 构造后@PostConstruct 和 销毁前@PreDestroy 的 InitDestoryAnnotationBeanPostProcessor 等
注册销毁
通过reigsterDisposableBean处理实现了DisposableBean接口的Bean的注册
3.添加到单例池
通过 addSingleton 方法,将Bean 加入到单例池 singleObjects
4.销毁
4.1.销毁前
调用 bean中@PreDestory 注解的方法
通过 postProcessBeforeDestruction 方法调用destoryBean逐一销毁Bean
4.2.销毁
调用 destoryBeans
4.3.执行客户自定义销毁
最后感谢B站up主 猿人林克 的分享
https://www.bilibili.com/video/BV1584y1r7n6/?spm_id_from=333.788&vd_source=21f24877c5ff5eae284dc31c34e43786
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2018-12-20 mysql 时区设置