-
什么是BeanPostProcessor
- 是spring IOC容器给我们提供的一个扩展接口
- 在调用初始化方法前后对bean进行额外加工,ApplicationContext会自动扫描实现了BeanPostProcessor的bean,并注册这些bean为后置处理器
- 是bean的统一前置后置处理而不是基于某一个bean
-
执行顺序
spring IOC容器实例化bean 调用BeanPostProcessor的postProcessBeforeInitialization方法 调用bean实例的初始化方法 调用BeanPostProcessor的postProcessAfterInitialization方法
-
代码示例,注意:接口重写的两个方法不能返回null,如果返回null那么在后续初始化方法将报空指针异常或者通过getBean()方法获取不到bean实例对象
package com.gen;import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.context.annotation.Configuration;@Configuration public class CustomBeanPostProcessor implements BeanPostProcessor {@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {System.out.println("CustomBeanPostProcessor-->before:" + beanName);return BeanPostProcessor.super.postProcessBeforeInitialization(bean, beanName);}@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {System.out.println("CustomBeanPostProcessor-->after:" + beanName);return BeanPostProcessor.super.postProcessAfterInitialization(bean, beanName);} }
-
可以注册多个BeanPostProcessor顺序
- 在spring机制中可以指定后置处理器调用顺序,通过BeanPostProcessor接口实现Ordered接口中的getOrder()方法,该方法返回整数,默认值为0优先级最高,值越大优先级越低