什么是BeanPostProcessor
BeanPostProcessor是spring中的后置处理器,spring中的bean的生命周期分为:创建,初始化,销毁。其中,在bean创建,属性赋值之后,会进行bean的初始化操作,而在初始化的前后会通过BeanPostProcessor进行前置和后置增强操作,通过源码分析可知:
在bean的初始化前后确实是通过后置处理器来增强的,而且在spring中的aop实现中,其实增强也是在这里进行的,只是前置处理在aop中是创建相应的bean的,而真正做增强业务的是在后置处理中。
使用BeanPostProcessor
搞清楚了BeanPostProcessor的作用,我们也可以在日常开发中来使用它,目的就是通过BeanPostProcessor在IOC容器加载我们的bean,初始化bean的前后进行对某些指定bean进行增强。
需求
对容器中Test5这个bean进行增强
实现类
@Component
public class Test6 implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof Test5){
System.out.println("1........." + bean + beanName);
}
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof Test5){
System.out.println("2........." + bean + beanName);
}
return bean;
}
}
测试
@RunWith(SpringRunner.class)
@SpringBootTest(classes = DemoApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class DemoApplicationTests {
@Autowired
private BeanFactory beanFactory;
@Test
public void contextLoads() {
Test6 bean = beanFactory.getBean(Test6.class);
System.out.println(bean);
}
}
结果
测试可得出,在Test5被初始化前后被进行了增强。