spring源碼-後置處理器BeanPostProcessor接口


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;
	}

}

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