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无参构造方法执行了。。。。
  • 相关阅读:
    js图片飘动
    实战ASP.NET大规模网站架构:Web加速器(1)【转】
    DNS服务器设置详解
    Lucene:基于Java的全文检索引擎简介【转】
    传道解惑 软件开发技术名词解密(转载)
    UTF8 and Unicode FAQ
    高并发 高负载 网站系统架构 !深入讨论!【转载】
    (转)值的关注的Java开源项目
    MSDN:Webcast 系列课程
    ASP.NET MVC 学习网站
  • 原文地址:https://www.cnblogs.com/zhangjianbing/p/10171537.html
Copyright © 2011-2022 走看看