zoukankan      html  css  js  c++  java
  • Spring源码窥探之:扩展原理BeanDefinitionRegistryPostProcessor

    BeanDefinitionRegistryPostProcessor继承自BeanFactoryPostProcessor,其中有两个接口,postProcessBeanDefinitionRegistry是BeanDefinitionRegistryPostProcessor自带的,postProcessBeanFactory是从BeanFactoryPostProcessor继承过来的。postProcessBeanDefinitionRegistry是在所有Bean定义信息将要被加载,Bean实例还未创建的时候执行,优先postProcessBeanFactory执行。下面举例:

    1. 实现类

    /**
     * @author 70KG
     * @Title: MyBeanDefinitionRegistryPostProcessor
     * @Description: BeanDefinitionRegistryPostProcessor实现类
     * @date 2018/12/24 9:43 PM
     * @From www.nmyswls.com
     */
    public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {
    
        // --- 此方法在所有Bean定义将要被加载,Bean实例还未创建的时候运行,它优先于postProcessBeanFactory方法执行。
        @Override
        public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
            System.out.println("---->postProcessBeanDefinitionRegistry容器中BeanDefinition的数量为:" + registry.getBeanDefinitionCount());
            RootBeanDefinition beanDefinition = new RootBeanDefinition(Dog.class);
            // 还可以这样给容器中注册Bean AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.rootBeanDefinition(Dog.class).getBeanDefinition();
            registry.registerBeanDefinition("dog", beanDefinition);
        }
    
        // 从BeanFactoryPostProcessor继承过来的接口
        @Override
        public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
            System.out.println("====>postProcessBeanFactory容器中BeanDefinition的数量为:" + beanFactory.getBeanDefinitionCount());
        }
    }

    2. 配置类

    /**
     * @author 70KG
     * @Title: MyConfig
     * @Description:
     * @date 2018/12/249:46 PM
     * @From www.nmyswls.com
     */
    @Configuration
    public class MyConfig {
    
        @Bean
        public Cat cat() {
            return new Cat();
        }
    
        @Bean
        public MyBeanDefinitionRegistryPostProcessor myBeanDefinitionRegistryPostProcessor() {
            return new MyBeanDefinitionRegistryPostProcessor();
        }
    
    }

    3. 测试类

    /**
     * @author 70KG
     * @Title: Test01
     * @Description:
     * @date 2018/12/249:45 PM
     * @From www.nmyswls.com
     */
    public class Test01 {
    
        public static void main(String[] args) {
            AnnotationConfigApplicationContext app = new AnnotationConfigApplicationContext(MyConfig.class);
        }
    
    }

    4. 结果

    ---->postProcessBeanDefinitionRegistry容器中BeanDefinition的数量为:9
    ====>容器中BeanDefinition的数量为:10
    。。。。Cat无参构造方法执行了。。。。
  • 相关阅读:
    vue中在echarts tooltip中添加点击事件
    支配树
    mac安装protobuf
    mac安装 thrift
    Javascript设计模式读书笔记二 接口
    WebBrowser捕获网页关闭事件
    谈谈UserControl调用页面的几种方法
    屏蔽刷新提交后台
    [喜讯]Acey.ExcelX组件已发布在componentsource
    AceyOffice教程如何判断单元格的内容
  • 原文地址:https://www.cnblogs.com/zhangjianbing/p/10171537.html
Copyright © 2011-2022 走看看