Spring Bean中初始化方法执行顺序

本文深入解析Spring框架中Bean的生命周期,包括singleton和prototype作用域下Bean的实例化时机,初始化顺序,以及SmartInitializingSingleton接口的调用条件。探讨了懒加载机制对Bean初始化的影响,并解释了依赖注入的时机。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 当@Scope为singleton时,bean会在ioc初始化时就被实例化,默认为singleton,可以配合@Lazy实现延时加载
2 当@Scope为prototype时,bean在ioc初始化时不会被实例化,只有在使用时,或者手动context.getBean()时才会被实例化

3 执行顺序 Constructor > @PostConstruct > InitializingBean > init-method > SmartInitializingSingleton

4 实现SmartInitializingSingleton接口的类,只有当被Spring实例化为一个单例bean,在所有的Bean加载完成后,才会被调用 如果该类被设置为懒加载,那么SmartInitializingSingleton接口方法永远不会被触发,即使使用时bean被实例化了也不会触发.原因见:
org.springframework.beans.factory.support.DefaultListableBeanFactory的public void preInstantiateSingletons()方法

5 其他的初始化方式不管是否懒加载,在对象被创建后都会被调用

6 如果是通过成员变量注入依赖的对象,而不是通过构造函数注入,那么在调用构造方法时,成员变量是没有被注入的,这也可以理解,因为只有有了对象之后才能通过代码对成员变量操作.(切记不是对象初始化,对象初始化之前是先初始化成员变量,不过这也是相对讲的,实际上实例化过程不仅仅这么简单)

7 如果一个类被设置为懒加载,但是其他类注入该懒加载类,也会立刻实例化为Spring Bean.
解决办法:可以在注入的地方也设置成懒加载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值