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

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被实例化了也不会触发

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

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

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

猜你喜欢

转载自blog.csdn.net/u013202238/article/details/85117961