Spring doc在使用BeanPostProcessor定制bean下解释了BPP 。BPP Bean是一种特殊的Bean,它是在其他任何Bean之前创建并与新创建的bean交互的。通过这种构造,Spring可以让你简单地实现
BeanPostProcessor自己,就可以连接并自定义生命周期行为。
具有自定义的BPP,例如
public class CustomBeanPostProcessor implements BeanPostProcessor { public CustomBeanPostProcessor() { System.out.println("0. Spring calls constructor"); } @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { System.out.println(bean.getClass() + " " + beanName); return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { System.out.println(bean.getClass() + " " + beanName); return bean; }}将被调用,并为每个创建的bean打印出类和bean名称。
要了解该方法如何适应bean的生命周期,以及何时确切调用该方法,请检查文档
postProcessBeforeInitialization(Object bean,String beanName)在任何bean初始化回调(如InitializingBean的afterPropertiesSet或自定义init-method)之前,将此BeanPostProcessor应用于给定的新bean实例。
postProcessAfterInitialization(Object bean,String beanName)在任何bean初始化回调(如InitializingBean的afterPropertiesSet或自定义的init-method)之后,将此BeanPostProcessor应用于给定的新bean实例。
重要的一点是
该bean将已经用属性值填充。
对于与关系的关系
@PostConstruct,该注释是一种声明
postProcessAfterInitialization方法的便捷方法,当你通过注册
CommonAnnotationBeanPostProcessor或指定
<context:annotation-config />in bean配置文件时,Spring会意识到这一点。该
@PostConstruct方法将在其他任何方法之前还是之后执行
postProcessAfterInitialization取决于order属性
你可以配置多个
BeanPostProcessor实例,并且可以通过设置
order属性来控制这些
BeanPostProcessor的执行顺序。



