Spring Bean的生命週期中各方法的執行順
Spring 容器中的 Bean 是有生命週期的,Spring 允許在 Bean 在初始化完成後以及 Bean 銷燬前執行特定的操作,常用的設定方式有以下十種:
- 通過實現 InitializingBean 接口來定製初始化之後的操作方法;
- 通過實現DisposableBean 接口來定製銷燬之前的操作方法;
- 通過元素的 init-method屬性指定初始化之後調用的操作方法;
- 通過元素的 destroy-method屬性指定銷燬之前調用的操作方法;
- 在指定方法上加上 @PostConstruct 註解來制定該方法是在初始化之後調用;
- 在指定方法上加上 @PreDestroy 註解來制定該方法是在銷燬之前調用;
- 實現BeanNameAware接口設置Bean的ID或者Name;
- 實現BeanFactoryAware接口設置BeanFactory;
- 實現ApplicationContextAware接口設置ApplicationContext;
- 註冊實現了BeanPostProcessor的Bean後處理器,通過postProcessBeforeInitialization和postProcessAfterInitialization 方法對初始化的Bean進行自定義處理;
初始化過程中各方法的執行順序如下:
- 調用構造器 Bean.constructor,進行實例化;
- 調用 Setter 方法,設置屬性值;
- 調用 BeanNameAware.setBeanName,設置Bean的ID或者Name;
- 調用 BeanFactoryAware.setBeanFactory,設置BeanFactory;
- 調用 ApplicationContextAware.setApplicationContext,置ApplicationContext;
- 調用BeanPostProcessor的預先初始化方法,如下:
- BeanPostProcessor1.postProcessBeforeInitialization
- BeanPostProcessor2.postProcessBeforeInitialization
- BeanPostProcessor3.postProcessBeforeInitialization
- 調用由 @PostConstruct 註解的方法;
- 調用 InitializingBean.afterPropertiesSet;
- 調用 Bean.init-mehod 初始化方法;
- 調用BeanPostProcessor的後初始化方法,如下:
- BeanPostProcessor1.postProcessAfterInitialization
- BeanPostProcessor2.postProcessAfterInitialization
- BeanPostProcessor3.postProcessAfterInitialization
容器關閉時,Bean銷燬過程中各方法的執行順序如下:
- 調用由 @PreDestroy 註解的方法
- 調用DisposableBean的destroy();
- 調用定製的destroy-method方法;