每个bean都会调用,可以在这里处理,bean的一些数据
public interface BeanPostProcessor {
//bean初始化方法调用前被调用
Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException;
//bean初始化方法调用后被调用
Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException;
}
运行顺序
- Spring IOC容器实例化Bean
- 调用BeanPostProcessor的postProcessBeforeInitialization方法
- 调用bean实例的初始化方法
- 调用BeanPostProcessor的postProcessAfterInitialization方法
/**
* 后置处理器:初始化前后进行处理工作
* 将后置处理器加入到容器中
*/
@Component
public class Q implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
switch (beanName) {
case "a":
case "b":
case "c":
case "p":
case "q":
System.out.println("postProcessBeforeInitialization..." + beanName + "=>" + bean);
break;
default:
}
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
switch (beanName) {
case "a":
case "b":
case "c":
case "p":
case "q":
System.out.println("postProcessAfterInitialization..." + beanName + "=>" + bean);
break;
default:
}
return bean;
}
}
日志打印:
AAAAAAAAAAAAA
postProcessBeforeInitialization…a=>com.zhaokuner.demo.A@576c5536
postProcessAfterInitialization…a=>com.zhaokuner.demo.A@576c5536
BBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCC
postProcessBeforeInitialization…c=>com.zhaokuner.demo.C@73044cdf
postProcessAfterInitialization…c=>com.zhaokuner.demo.C@73044cdf
postProcessBeforeInitialization…b=>com.zhaokuner.demo.B@58112bc4
BBBBBBBBBCCCCCCCCCcom.zhaokuner.demo.C@73044cdf
postProcessAfterInitialization…b=>com.zhaokuner.demo.B@58112bc4