一分鐘學會spring-bean的統一前後置處理器BeanPostProcessor

上文跟大家簡單介紹了下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底層的實現原理敬請期待...


以上是今天文章的所有內容,歡迎大家吐槽



更多優質文章請關注以下公衆號查閱:




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章