上文跟大家簡單介紹了下springBean生命週期的初始化以及銷燬的幾種使用方法,沒有查閱的可以點擊:三分鐘瞭解spring-bean生命週期之初始化和銷燬的三種方式
今天給大家介紹第4種方式,基於實現BeanPostProcessor接口的方式,爲啥沒放在之前文章中一起介紹,是因爲實現BeanPostProcessor的方式是bean的統一前置後置處理而不是基於某一個bean,好了,話不多說,直接看代碼
定義一個前置後置處理器MyBeanPostProcessor如下:
/**
* 定義一個前置後置處理器
*
* @author zhangqh
* @date 2018年5月6日
*/
public class MyBeanPostProcessor implements BeanPostProcessor {
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
// 這邊只做簡單打印 原樣返回bean
System.out.println("postProcessBeforeInitialization===="+beanName);
return bean;
}
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
// 這邊只做簡單打印 原樣返回bean
System.out.println("postProcessAfterInitialization===="+beanName);
return bean;
}
}
配置類中增加配置如下:
@Bean
public MyBeanPostProcessor getMyBeanPostProcessor(){
return new MyBeanPostProcessor();
}
運行測試結果如下:
postProcessBeforeInitialization====org.springframework.context.event.internalEventListenerProcessor
postProcessAfterInitialization====org.springframework.context.event.internalEventListenerProcessor
postProcessBeforeInitialization====org.springframework.context.event.internalEventListenerFactory
postProcessAfterInitialization====org.springframework.context.event.internalEventListenerFactory
postProcessBeforeInitialization====user1
postProcessAfterInitialization====user1
從結果可以看出,不僅自定義的bean-user1被處理了,spring中對應的bean也同樣被處理了
下面簡單說一下的使用場景:
1,可以解析bean中的一些註解轉化爲需要的屬性
2,注入處理一些統一的屬性,而不用在每個bean中注入
3,甚至可以做一些日誌打印時間等
spring中本身也有很多BeanPostProcessor的實現如下圖:
注意上圖中的標紅的實現,@Autowired想必大家都有使用過,其中的原理就是它了,這裏暫且不詳述,後邊會單獨文章詳細介紹
好了,今天主要介紹了一下BeanPostProcessor的簡單使用,下文會詳細的寫文章介紹spring生命週期以及BeanPostProcessor底層的實現原理,敬請期待...
以上是今天文章的所有內容,歡迎大家吐槽
更多優質文章請關注以下公衆號查閱: