博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring源码窥探之:ImportBeanDefinitionRegistrar
阅读量:4322 次
发布时间:2019-06-06

本文共 2393 字,大约阅读时间需要 7 分钟。

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

 

转载于:https://www.cnblogs.com/zhangjianbing/p/10114196.html

你可能感兴趣的文章
hdu1181暴搜
查看>>
解码字符串 Decode String
查看>>
json学习笔记
查看>>
工具:linux 性能监控工具-nmon
查看>>
fatal error C1853
查看>>
Ural 1001 - Reverse Root
查看>>
玩转webpack之webpack的entry output
查看>>
java 操作mongodb查询条件的常用设置
查看>>
黑马程序员_java基础笔记(02)...java语言基础组成
查看>>
对innodb 拷贝文件实现数据库的方式(转)
查看>>
python知识点 2014-07-09
查看>>
FloatingActionButton的一点学习感悟
查看>>
ABAP CDS ON HANA-(10)項目結合して一つ項目として表示
查看>>
网站地址信息
查看>>
产品经理 - 登录 注册
查看>>
小白的python进阶历程------05.占位符
查看>>
CF414BMashmokh and ACMDP
查看>>
Notepad++ 通过g++编译
查看>>
JAVA基础2——类初始化相关执行顺序
查看>>
转:Zend Framework 重定向方法(render, forward, redirect)
查看>>