Spring后置处理器BeanPostProcessor

  • 什么是BeanPostProcessor

    • 是Spring IOC容器给我们提供的一个扩展接口
    • 在调用初始化方法前后对bean进行额外加工,ApplicationContext会自动扫描实现了BeanPostProcessor的bean,并注册这些bean为后置处理器
    • 是bean的统一前置后置处理而不是基于某一个bean
  • 执行顺序

    Spring IOC容器实例化bean
    调用BeanPostProcessor的postProcessBeforeInitialization方法
    调用bean实例的初始化方法
    调用BeanPostProcessor的postProcessAfterInitialization方法
    
  • 代码示例如下,注意:接口重写的两个方法不能返回null,如果返回null那么在后续初始化方法将报空指针异常或者通过getBean()方法获取不到bean实例对象

    package com.gen;
    
    import org.springframework.beans.BeansException;
    import org.springframework.beans.factory.config.BeanPostProcessor;
    import org.springframework.core.Ordered;
    import org.springframework.stereotype.Component;
    
    @Component
    public class CustomBeanPostProcessor implements BeanPostProcessor, Ordered {
        @Override
        public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
            System.out.println("before---------------------" + beanName);
            return bean;
        }
    
        @Override
        public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
            System.out.println("after---------------------" + beanName);
            return bean;
        }
    
        @Override
        public int getOrder() {
            return 1;
        }
    }
    
  • 可以注册多个BeanPostProcessor顺序

    • 在Spring机制中可以指定后置处理器调用顺序,通过BeanPostProcessor接口实现Ordered接口getOrder方法,该方法返回整数,默认为0优先级最高,值越大优先级越低
上一篇:spring系列---【后置处理器之BeanPostProcessor】


下一篇:Spring - BeanPostProcessor 接口