一.前言
暂时还没发现应用场景。
BeanPostProcessor接口是 Bean 的后置处理器,主要是在 bean 初始化前后进行一些处理工作。
二.BeanPostProcessor 接口分析
实现BeanPostProcessor接口之后需要 Override 两个方法(原接口的default方法):
1.postProcessBeforeInitialization:初始化之前做一些初始化工作;
2.postProcessAfterInitialization:初始化之后做一些工作。

两个方法入口参数第一个为 bean 实例,第二个为这个 bean 的名称。
两个方法均返回 Object 对象,这个对象就是入口参数的 bean 实例。
Spring 框架会遍历得到容器中所有的 BeanPostProcessor ,挨个执行 postProcessBeforeInitialization 当返回的 bean 为 null 时,跳出 for 循环,不会执行后面的 BeanPostProcessor.postProcessBeforeInitialization。

三.自定义 BeanPostProcessor
首先继承 BeanPostProcessor 接口
// 将后置处理器加入到容器
@Component
public class MyBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessBeforeInitialization...." + beanName + "=>" + bean);
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessAfterInitialization...." + beanName + "=>" + bean);
return bean;
}
}
四.Spring 底层对 BeanPostProcessor 的使用
applicationcontext可以在bean定义中自动检测BeanPostProcessor bean,并将它们应用于随后创建的任何bean。普通bean工厂允许对后处理器进行编程注册,应用于通过该工厂创建的所有bean。
通常,通过标记接口或类似方式填充bean的后处理器将实现{postprocessbeforeinitialize},而使用代理包装bean的后处理器通常实现{postprocessafterinitialize}。


网友评论