我结合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。
相关推荐
她说彩礼65万3 分钟前
C语言 单引号与双引号知守观5 分钟前
百万级数据导出OOM:POI的坑与EasyExcel的流式写入实战(附内存对比)“AI国潮设计-小江”8 分钟前
Python实战 | SDXL批量生成“潮汕英歌舞”国潮甜品IP,附核心Prompt与商用授权思路anew___12 分钟前
《从零手写操作系统 (19):Ext2文件系统实战——从内存到磁盘的跨越》H.莓飛18 分钟前
【数据结构】栈无糖可乐没有灵魂21 分钟前
用一篇文章来精通“进程/线程/协程/锁“多并发任务2601_9628857221 分钟前
如何用 Python 分析股票的日历效应?(星期效应与月份效应,附数据挖掘陷阱)蜗牛互联网27 分钟前
Computer Use公共预览的安全设计:应用、动作与数据三维门禁FYKJ_201031 分钟前
SSM校园互助与闲置交易平台62145-计算机课程设计、毕业设计