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接口
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.