我结合Spring来讲下Bean的生命周期,整体分为创建、初始化、使用、销毁这几大块,步骤顺序是固定的。 第一步是实例化,Spring根据BeanDefinition调用构造器创建出对象,此时对象属性都还是空值。 第二步进行属性填充,完成依赖注入,像@Autowired自动装配就在这一步执行,给各个属性赋值。 第三步执行Aware接口回调,如果类实现了BeanNameAware、ApplicationContextAware这些接口,容器会把bean名称、上下文等资源注入进来。 第四步是初始化,顺序不能乱:先执行BeanPostProcessor的前置方法,接着依次执行@PostConstruct注解、InitializingBean的afterPropertiesSet方法、配置指定的init-method;全部完成后执行BeanPostProcessor后置方法,我们常用的AOP代理就是在这里生成的。 走完上面流程,Bean就准备好了,我们可以正常从容器获取使用。 最后是销毁阶段,只有单例Bean会由容器管理销毁,容器关闭时触发,执行顺序为@PreDestroy、DisposableBean的destroy方法、配置的destroy-method。多例Bean容器不会管控销毁,需要我们自己手动处理。 额外补充两点,单例Bean默认容器启动时就创建完整生命周期;多例每次获取才实例化,容器不负责销毁。后置处理器是全局钩子,能统一干预所有Bean。
相关推荐
apcipot_rain3 小时前
C++转Java日记(06)金銀銅鐵8 小时前
带您看懂字节码指令(一):一帧里有什么nice_lcj52010 小时前
【从零理解 Spring AI · 14】RAG 的四个环节:加载、切分、向量化、检索SomeOtherTime10 小时前
Rust所有权(AI回答)Easyhood10 小时前
Android 开发入门实践(十四):Compose 副作用入门与四个常用 API白杨尚青11 小时前
C++进阶篇(六):map 和 set 的模拟实现——用红黑树封装 mymap/myset(迭代器 + operator[])学长毕设11 小时前
基于springboot科创竞赛信息平台-附源码聪明的笨猪猪12 小时前
Java 工程案例:AI 生成 @Async 异步线程池踩坑学长毕设12 小时前
基于SpringBoot公务员考试交流平台-附源码SL_staff15 小时前
私有化低代码:面向强监管行业的可控数字化实践