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.context.annotation.Configuration;
    
    @Configuration
    public class CustomBeanPostProcessor implements BeanPostProcessor {
        @Override
        public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
            System.out.println("CustomBeanPostProcessor-->before:" + beanName);
            return BeanPostProcessor.super.postProcessBeforeInitialization(bean, beanName);
        }
    
        @Override
        public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
            System.out.println("CustomBeanPostProcessor-->after:" + beanName);
            return BeanPostProcessor.super.postProcessAfterInitialization(bean, beanName);
        }
    }
    
  • 可以注册多个BeanPostProcessor顺序

    • 在spring机制中可以指定后置处理器调用顺序,通过BeanPostProcessor接口实现Ordered接口中的getOrder()方法,该方法返回整数,默认值为0优先级最高,值越大优先级越低

你可能感兴趣的:(spring,spring)