zoukankan      html  css  js  c++  java
  • spring-BeanPostProcessor

    BeanPostProcessor是spring框架提供的一个扩展点。

    通过实现这个接口,程序员可插手bean实例化的过程。且这个接口可以设置多个,会形成一个列表,依次执行。

    AOP正是通过BeanPostProcessor和IOC容器建立起了联系。

    public interface BeanPostProcessor {
    
        default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
            return bean;
        }
    
        default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
            return bean;
        }
    
    }

    它有两个方法postProcessBeforeInitialization,postProcessAfterInitialization
    分别在bean初始化之前和之后执行。
    执行顺序如下:
    1,首先执行bean的构造方法,
    2,BeanPostProcessor的postProcessBeforeInitialization方法
    3,InitializingBean的afterPropertiesSet方法
    4,initMethod方法
    5,BeanPostProcessor的postProcessAfterInitialization方法

    示例:

    package com.test2;
    
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    @ComponentScan("com.test2")
    public class AppConfig {
    }
    package com.test2;
    
    import org.springframework.stereotype.Component;
    
    import javax.annotation.PostConstruct;
    
    @Component
    public class Bean1 {
    
        public Bean1(){
            System.out.println("Bean1 构造");
        }
    
        @PostConstruct
        public void init(){
            System.out.println("Bean1 init");
        }
    }
    package com.test2;
    
    import org.springframework.beans.BeansException;
    import org.springframework.beans.factory.config.BeanPostProcessor;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.core.PriorityOrdered;
    import org.springframework.stereotype.Component;
    
    @Component
    public class MyBeanPostProcessor implements BeanPostProcessor,PriorityOrdered {
    
        public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
            System.out.println(beanName + " postProcessAfterInitialization");
    
            return bean;
        }
    
        public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
            System.out.println(beanName + " postProcessBeforeInitialization");
    
            return bean;
        }
    
        public int getOrder() {
            return 11; //值越小越先执行
        }
    }
    package com.test2;
    
    import org.springframework.beans.BeansException;
    import org.springframework.beans.factory.config.BeanPostProcessor;
    import org.springframework.core.PriorityOrdered;
    import org.springframework.stereotype.Component;
    
    @Component
    public class MyBeanPostProcessor1 implements BeanPostProcessor,PriorityOrdered {
    
        public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
            System.out.println(beanName + " postProcessAfterInitialization1");
    
            return bean;
        }
    
        public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
            System.out.println(beanName + " postProcessBeforeInitialization1");
    
            return bean;
        }
    
        public int getOrder() {
            return 10;
        }
    }
    package com.test2;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    public class MyTest {
    
        public static void main(String[] args) {
            AnnotationConfigApplicationContext context =
                    new AnnotationConfigApplicationContext(AppConfig.class);
            System.out.println(context.getBean("bean1"));
    
        }
    }

    执行结果:

    appConfig postProcessBeforeInitialization1
    appConfig postProcessBeforeInitialization
    appConfig postProcessAfterInitialization1
    appConfig postProcessAfterInitialization
    Bean1 构造
    bean1 postProcessBeforeInitialization1
    bean1 postProcessBeforeInitialization
    Bean1 init
    bean1 postProcessAfterInitialization1
    bean1 postProcessAfterInitialization
    com.test2.Bean1@6e38921c
  • 相关阅读:
    MFC记录
    【转】linux下tty,控制台,虚拟终端,串口,console(控制台终端)详解----不错
    【转】五大绝招复制不能复制的网页文字
    【转】DELL戴尔N4050笔记本拆机(图文)
    【转】Linux下tar.xz结尾的文件的解压方法
    【转】在Ubuntu 12.04 上为Virtualbox 启用USB 设备支持--不错
    【转】Android adb shell操作时出现“ XXX ... Read-only file system”解决办法--不错
    【转】VirtualBox direct access to SD Card in Windows--不错
    网址
    TensorFlow 学习(九)—— 初始化函数(概率分布函数 api、常数生成函数)
  • 原文地址:https://www.cnblogs.com/yintingting/p/6228799.html
Copyright © 2011-2022 走看看