美文网首页
Spring-BeanPostProcessor的学习

Spring-BeanPostProcessor的学习

作者: 傻狗羊 | 来源:发表于2020-09-01 16:23 被阅读0次

    简述

    spring中,有两个核心Processor接口:BeanPostProcessorBeanFactoryPostProcessor

    spring boot中,有个核心Processor接口:EnvironmentPostProcessor

    其实,Processor 没有什么原理,主要原理就是这个翻译上:处理机、加工机。
    下面介绍一下 SpringSpring Boot 中的核心 Processor 类的原理,帮助理解 Spring 的设计思路。


    spring中的Processor

    Spring 设计时考虑的设计模式的开闭原则,因此提供了大量的扩展接口,其中就有 BeanPostProcessorBeanFactoryPostProcessor

    • BeanPostProcessor : 对容器中的 Bean 进行后处理,增强 Bean 的功能,在bean初始化前后进行操作
    • BeanFactoryPostProcessor :对 Spring 容器本身进行后处理,增强容器的功能

    区别:

    1. BeanPostProcessor 执行顺序在 BeanFactoryPostProcessor 之后
    2. BeanPostProcessorSpring 容器加载 Bean 的定义文件并且实例化 Bean 之后,在容器执行 InitializingBean 之前执行的。
    3. BeanFactoryPostProcessorSpring 容器加载 Bean 的定义文件之后,在执行 Bean 实例化之前执行的。

    BeanFactoryPostProcessor 流程图如下:

    f45664ef.png

    Spring 容器加载 Bean 的定义文件执行 BeanFactoryPostProcessor执行 Bean 实例化

    BeanPostProcessor 流程图如下

    c3858515.png

    BeanPostProcessor【interface】,bean的后置处理器

    public interface BeanPostProcessor {
    
        /**
         * 在bean初始化之前工作
         * 生命周期:在任何 [初始化方法] 调用之前执行
         */
        @Nullable // spring5 新特性,允许为空
        default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
            return bean;
        }
    
        /**
         * 在bean初始化方法调用之后工作
         * 
         */
        @Nullable // spring5 新特性,允许为空
        default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
            return bean;
        }
    
    }
    

    spring底层对BeanPostProcessor的使用

    相关文章

      网友评论

          本文标题:Spring-BeanPostProcessor的学习

          本文链接:https://www.haomeiwen.com/subject/jqvvsktx.html