1.BeanPostProcessor
/**
* BeanPostProcessor為我們提供了兩個方法,我們可以在Spring實例化Bean的前后實現我們的特定需求。
* (Spring AOP就是根據BeanPostProcessor建立與IOC的聯系)
*/
public interface BeanPostProcessor {
@Nullable default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { return bean; } @Nullable default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { return bean; } }
我們都知道,實現ApplicationContextAware接口,Spirng初始化Bean時會調用setApplicationContext方法,幫助我們注入ApplicationContext對象。其實這個功能就是利用BeanPostProcessor實現的,具體可以看源碼參考Spirng的 ApplicationContextAwareProcessor這個類。
2.BeanFactoryPostProcessor
/**
* 實現該接口,可以在Spring的Bean創建之前修改Bean定義的屬性。
*/
@FunctionalInterface
public interface BeanFactoryPostProcessor { void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException; }
簡單的說就是Spring提供了一個接口,這個接口可以讓我們修改Spring內部的BeanFactory。(在這之前要請先了解什么是BeanFactory,並了解FactoryBean和BeanFactory的區別。
可參考:https://www.cnblogs.com/MichaelPL/p/11631808.html)
BeanDefinitionRegistryPostProcessor
DestructionAwareBeanPostProcessor
InstantiationAwareBeanPostProcessor
MergedBeanDefinitionPostProcessor
RequiredAnnotationBeanPostProcessor