zoukankan      html  css  js  c++  java
  • Spring源码窥探之:ImportBeanDefinitionRegistrar

    1. 编写实现ImportBeanDefinitionRegistrar的类

    /**
     * description
     *
     * @author 70KG
     * @date 2018/11/13
     */
    public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
    
        @Override
        public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
            // 获取容器中已经存在的Bean的名字
            boolean definition1 = registry.containsBeanDefinition("com.nmys.story.springCore.springioc.importBean.Cat");
            boolean definition2 = registry.containsBeanDefinition("com.nmys.story.springCore.springioc.importBean.Dog");
            if (definition1 && definition2) {
                // 将需要放入容器中的Bean用RootBeanDefinition来包装一下。
                RootBeanDefinition beanDefinition = new RootBeanDefinition(Pig.class);
                // 向容器中注册这个Bean,并给定一个名字。
                registry.registerBeanDefinition("pig", beanDefinition);
            }
        }
    }

    以上代码的意思是,从容器中尝试获取Cat和Dog,如果两者都存在,那么就向容器中注入Pig类。有条件,有选择性的向容器中注入Bean

    2. 配置类

    /**
     * description
     *
     * @author 70KG
     * @date 2018/11/13
     */
    @Configuration
    @Import(value = {Cat.class, Dog.class, MyImportBeanDefinitionRegistrar.class})
    public class MyImportBeanDefinitionRegistrarConfig {
    
    }

    3. 测试类

    /**
     * description
     *
     * @author 70KG
     * @date 2018/11/13
     */
    public class Test02 {
    
        @Test
        public void test() {
    
            // IOC容器创建(容器类似一个Map)
            AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(MyImportBeanDefinitionRegistrarConfig.class);
    
            System.out.println("IOC容器初始化完成。。。。。");
    
            // 从容器中获取所有的bean的ID
            String[] definitionNames = ac.getBeanDefinitionNames();
    
            for (String name : definitionNames) {
                System.out.println("------->" + name);
            }
    
        }
    
    }

    4. 结果

    IOC容器初始化完成。。。。。
    ------->org.springframework.context.annotation.internalConfigurationAnnotationProcessor
    ------->org.springframework.context.annotation.internalAutowiredAnnotationProcessor
    ------->org.springframework.context.annotation.internalRequiredAnnotationProcessor
    ------->org.springframework.context.annotation.internalCommonAnnotationProcessor
    ------->org.springframework.context.event.internalEventListenerProcessor
    ------->org.springframework.context.event.internalEventListenerFactory
    ------->myImportBeanDefinitionRegistrarConfig
    ------->com.nmys.story.springCore.springioc.importBean.Cat
    ------->com.nmys.story.springCore.springioc.importBean.Dog
    ------->pig
  • 相关阅读:
    JabberNet -Jabbber .net客户端框架(XMPP协议)
    百度,腾讯,抖音,头条等互联网平台广告投放策略分析
    C# HttpWebRequest post提交数据
    eclipse汉化babel语言包安装
    C#技巧记录——持续更新
    ffmpeg 抓取屏幕
    WPF inkcanvas选中笔迹缩放、旋转,放大缩小画布、移动画布
    wpf虚线画刷
    wpf获取元素四个角对应的point
    wpf 装饰类
  • 原文地址:https://www.cnblogs.com/zhangjianbing/p/10114196.html
Copyright © 2011-2022 走看看