Spring源码分析:Spring中的后置处理器BeanPostProcessor

BeanPostProcessor简介

BeanPostProcessor是Spring IOC容器给我们提供的一个扩展接口,如果我们需要在容器完成Bean的实例、初始化方法前后添加一些自己的逻辑处理,那么定义一个BeanPostProcessor接口的实现类。

Spring源码分析:Spring中的后置处理器BeanPostProcessor_第1张图片

BeanPostProcessor接口声明

Spring源码分析:Spring中的后置处理器BeanPostProcessor_第2张图片

postProcessorBeforeInitailization方法:在bean实例化,依赖注入之后及自定义初始化方法(例如:配置文件中bean标签添加init-method属性指定Java类中初始化方法、 @PostConstruct注解指定初始化方法、Java类实现InitailztingBean接口)之前调用

postProcessorAfterInitailization方法:在bean实例化、依赖注入及自定义初始化方法之后调用

Spring源码分析:Spring中的后置处理器BeanPostProcessor_第3张图片

ApplicationContext容器会自动检测Spring配置文件中那些bean所对应的Java类实现了BeanPostProcessor 接口,并调用addBeanPostProcessor() 把它们注册为后置处理器。  

测试类

Spring源码分析:Spring中的后置处理器BeanPostProcessor_第4张图片

 

 Spring源码分析:Spring中的后置处理器BeanPostProcessor_第5张图片

运行结果: 

 Spring源码分析:Spring中的后置处理器BeanPostProcessor_第6张图片

 

在Spring机制中可以指定后置处理器调用顺序,通过让BeanPostProcessor接口实现类实现PriorityOrdered接口getOrder方法,该方法返回int整数,默认值为 0,优先级最高,值越大优先级越低 。

Spring源码分析:Spring中的后置处理器BeanPostProcessor_第7张图片

Spring源码分析:Spring中的后置处理器BeanPostProcessor_第8张图片 

Spring源码分析:Spring中的后置处理器BeanPostProcessor_第9张图片

再定义一个后置处理器 ,同时实现PriorityOrdered接口,getOrder方法返回200,并注册到IOC容器中,再次运行结果如下:

Spring源码分析:Spring中的后置处理器BeanPostProcessor_第10张图片

你可能感兴趣的:(Spring源码分析:Spring中的后置处理器BeanPostProcessor)