spring生命週期詳解:
1. @Bean初始化與銷毀
1.1 bean的生命週期:
bean創建-----初始化-----銷毀的過程
1.2 容器管理bean的生命週期:
我們可以自訂初始化和銷毀方法:容器在bean進行到當前生命週期的時候來呼叫我們自訂的初始化和銷毀方法。
建構子:
單一實例:容器建立時進行初始化
多重實例:每次取得的時候建立物件
BeanPostProcessor.postProcessBeforeInitialization
##初始化:
物件建立完成,並賦值好,呼叫初始化方法。
BeanPostProcessor.postProcessAfterInitialization銷毀:
單一實例:容器關閉的時候
多實例:容器不會管理這個bean;容器不會呼叫銷毀方法;
1、指定初始化和銷毀方法
透過@Bean指定init-method和destroy-method;
2、透過Bean實作InitializingBean(定義初始化邏輯)
DisposableBean(定義銷毀邏輯)
3、可以使用JSR250規格:
@PostConstruct:在bean建立完成並且屬性賦值完成
@PreDestroy:在容器銷毀bean銷毀之前呼叫清理工作
##a. initMethod 和destroyMethod 的使用
MainConfig.java
@Configuration@ComponentScan("com.zero.life")public class MainConfig {// @Scope("prototype") @Bean(initMethod = "init",destroyMethod = "destroy") public Phone phone(){ return new Phone(); }} Phone.java public class Phone { public Phone() { System.out.println("Phone初始化构造。。。"); } public void init(){ System.out.println("Phone 初始化方法。。。。"); } public void destroy(){ System.out.println("Phone 销毁方法。。。"); }}
@Componentpublic class Android implements InitializingBean,DisposableBean {
public Android() {
System.out.println("android constructor.......");
}
@Override
public void destroy() throws Exception {
System.out.println("android destroy........");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("android afterPropertiesSet........");
}}
@Componentpublic class AIIphone {
public AIIphone() {
System.out.println("AIIphone.... contruct...");
}
@PostConstruct
public void init(){
System.out.println("AIIphone.....PostConstruct");
}
@PreDestroy
public void destroy(){
System.out.println("AIIphone......PreDestroy");
}}
BeanPostProcessor【interface】:
bean的後置處理器:在bean初始化前後進行一些處理工作。
1. postProcessBeforeInitialization:在初始化之前工作
2. postProcessAfterInitialization:在初始化之後工作
/** * 后置处理器,初始化前后进行处理工作 */@Componentpublic class MyBeanPostProcessor implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { System.out.println("postProcessBeforeInitialization....."+beanName+"=>"+bean); return bean;//可对bean进行包装后返回 } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { System.out.println("postProcessAfterInitialization....."+beanName+"=>"+bean); return bean;//可对bean进行包装后返回 }}
以上是spring生命週期詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!