理解 SpringBoot2.X - BeanPostProcessor 接口

一.前言

暂时还没发现应用场景。
BeanPostProcessor接口是 Bean 的后置处理器,主要是在 bean 初始化前后进行一些处理工作。

二.BeanPostProcessor 接口分析

实现BeanPostProcessor接口之后需要 Override 两个方法(原接口的default方法):
1.postProcessBeforeInitialization:初始化之前做一些初始化工作;
2.postProcessAfterInitialization:初始化之后做一些工作。

理解 SpringBoot2.X - BeanPostProcessor 接口_第1张图片
屏幕快照 2018-08-20 下午7.36.33.png

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

理解 SpringBoot2.X - BeanPostProcessor 接口_第2张图片
屏幕快照 2018-08-20 下午7.36.53.png

三.自定义 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}。


image.png
理解 SpringBoot2.X - BeanPostProcessor 接口_第3张图片
image.png

五.代码路径

https://github.com/shaopro/SpringBootBeanPostProcessor

你可能感兴趣的:(理解 SpringBoot2.X - BeanPostProcessor 接口)