Spring Bean 的生命周期
1. Bean的生命周期
1. 实例化:Spring对bean 进行实例化;
2. 填充属性:Spring将值和bean 的引用注入到 bean 对应的属性中;
3. 如果bean 实现了 BeanNameAware接口,Spring将bean的ID传递给setBean-Name()方法;
4. 如果bean实现了 BeanFactoryAware接口,Spring将调用setBeanFactory()方法,将BeanFactory 容器实例传入;
5. 如果 bean 实现了 ApplicationContextAware 接口,Spring 将调用setApplicationContext()方法,将bean所在的应用上下文的引用传人进来;
6. 前置处理器:如果bean 实现了 BeanPostProcessor接口,Spring 将调用它们的 post-ProcessBeforeInitialization()方法;
7. 如果 bean实现了 InitializingBean接口,Spring 将调用它们的 after-PropertiesSet()方法。
8. 如果 bean 使用init-method声明了初始化方法,该方法也会被调用;
9. 后置处理器:如果 bean 实现了 BeanPostProcessor接口,Spring 将调用它们的 post-ProcessAfterInitialization()方法;
10. 此时,bean 已经准备就绪,可以被应用程序使用了,它们将一直驻留在应用上下文中,直到该应用上下文被销毁;
11. 销毁:如果bean实现了 DisposableBean接口,Spring将调用它的destroy()接口方法。同样,如果bean使用destroy-method声明了销毁方法,该方法也会被调用。
2. 延迟加载
默认情况下,容器启动后会将所有作用域为单例的 bean 都创建完成,我们可以通过 bean 的 lzay-init 属性延迟加载,等get这个bean时再创建这个 bean;