package org.springframework.beans.factory.config;
import org.springframework.beans.BeansException;
import org.springframework.lang.Nullable;
/**
* BeanPostProcessor是Spring框架的提供的一個擴展類點(不止一個)
* 通過實現BeanPostProcessor接口,程序員就可插手bean實例化的過程,從而減輕了beanFactory的負擔
* 值得說明的是這個接口可以設置多個,會形成一個列表,然後依次執行
* (但是spring默認的怎麼辦?set)
* 比如AOP就是在bean實例後期間將切面邏輯織入bean實例中的
* AOP也正是通過BeanPostProcessor和IOC容器建立起了聯繫
* (由spring提供的默認的PostPorcessor,spring提供了很多默認的PostProcessor,下面我會一一介紹這些實現類的功能)
* 可以來演示一下 BeanPostProcessor 的使用方式(把動態代理和IOC、aop結合起來使用)
* 在演示之前先來熟悉一下這個接口,其實這個接口本身特別簡單,簡單到你髮指
* 但是他的實現類特別複雜,同樣複雜到髮指!
* 可以看看spring提供哪些默認的實現(前方高能)
* 查看類的關係圖可以知道spring提供了以下的默認實現,因爲高能,故而我們只是解釋幾個常用的
* 1、ApplicationContextAwareProcessor (acap)
* acap後置處理器的作用是,當應用程序定義的Bean實現ApplicationContextAware接口時注入ApplicationContext對象
* 當然這是他的第一個作業,他還有其他作用,這裏不一一列舉了,可以參考源碼
* 我們可以針對ApplicationContextAwareProcessor寫一個栗子
* 2、InitDestroyAnnotationBeanPostProcessor
* 用來處理自定義的初始化方法和銷燬方法
* 上次說過Spring中提供了3種自定義初始化和銷燬方法分別是
* 一、通過@Bean指定init-method和destroy-method屬性
* 二、Bean實現InitializingBean接口和實現DisposableBean
* 三、@PostConstruct:@PreDestroy
* 爲什麼spring通這三種方法都能完成對bean生命週期的回調呢?
* 可以通過InitDestroyAnnotationBeanPostProcessor的源碼來解釋
* 3、InstantiationAwareBeanPostProcessor
* 4、CommonAnnotationBeanPostProcessor
* 5、AutowiredAnnotationBeanPostProcessor
* 6 、RequiredAnnotationBeanPostProcessor
* 7、BeanValidationPostProcessor
* 8、AbstractAutoProxyCreator
* ......
* 後面會一一解釋
*
*/
public interface BeanPostProcessor {
/**
* 在bean初始化之前執行
*/
@Nullable
default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
/**
* 初始化之後
*/
@Nullable
default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
}
spring源碼-後置處理器BeanPostProcessor接口
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.