1. 编写实现ImportBeanDefinitionRegistrar的类

/*** description** @author 70KG* @date 2018/11/13*/
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {@Overridepublic 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 {@Testpublic void test() {// IOC容器创建(容器类似一个Map)AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(MyImportBeanDefinitionRegistrarConfig.class);System.out.println("IOC容器初始化完成。。。。。");// 从容器中获取所有的bean的IDString[] 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

Spring源码窥探之:ImportBeanDefinitionRegistrar相关推荐

  1. Spring源码窥探之:xxxAware接口

    Aware接口是一个标志性接口,继承此接口的接口xxxAware的实现类,在容器创建完成后,会回调实现方法,下面举例: 1. 有很多xxxAware接口,下面举两个例子 /*** descriptio ...

  2. Spring源码剖析——Bean的配置与启动

    IOC介绍   相信大多数人在学习Spring时 IOC 和 Bean 算得上是最常听到的两个名词,IOC在学习Spring当中出现频率如此之高必然有其原因.如果我们做一个比喻的话,把Bean说成Sp ...

  3. 转 Spring源码剖析——核心IOC容器原理

    Spring源码剖析--核心IOC容器原理 2016年08月05日 15:06:16 阅读数:8312 标签: spring 源码 ioc 编程 bean 更多 个人分类: Java https:// ...

  4. Spring源码解析【完整版】--【bilibili地址:https://www.bilibili.com/video/BV1oW41167AV】

    [本文为bilibili视频雷丰阳的Spring源码解析的完整版总结文章,其中文章前面大部分为他人博文的搬运,后面补充了其未总结的部分] 一.Java的注解 1. 注解的概念 注释:用文字描述程序,给 ...

  5. Spring源码深度解析(郝佳)-学习-Spring Boot体系原理

      Spring Boot是由Pivotal团队提供的全新框架,其设计目的用来简化新Spring应用初始化搭建以及开发过程,该框架使用了我写的方式进行配置,从而开发人员不再需要定义样板化的配置,通过这 ...

  6. 《Spring源码深度解析 郝佳 第2版》SpringBoot体系分析、Starter的原理

    往期博客 <Spring源码深度解析 郝佳 第2版>容器的基本实现与XML文件的加载 <Spring源码深度解析 郝佳 第2版>XML标签的解析 <Spring源码深度解 ...

  7. Spring源码深度解析(郝佳)-Spring 常用注解使用及源码解析

      我们在看Spring Boot源码时,经常会看到一些配置类中使用了注解,本身配置类的逻辑就比较复杂了,再加上一些注解在里面,让我们阅读源码更加难解释了,因此,这篇博客主要对配置类上的一些注解的使用 ...

  8. 志宇-Spring源码分析

    AnnotationConfigApplicationContext Spring初始化流程 Spring循环依赖 SpringAOP spring注解 @Configuration 一.组件添加 @ ...

  9. Spring源码分析之Bean的创建过程详解

    前文传送门: Spring源码分析之预启动流程 Spring源码分析之BeanFactory体系结构 Spring源码分析之BeanFactoryPostProcessor调用过程详解 本文内容: 在 ...

最新文章

  1. Python,OpenCV中的K近邻(knn K-Nearest Neighbor)及改进版的K近邻
  2. aligned_storage简单学习
  3. Google学术搜索方法
  4. KMP算法的来龙去脉
  5. [资料]Keychain 获取设备唯一
  6. Jupyter notebook的内核是什么?Ipython
  7. 点击button标签会导致提交form
  8. WIFI理论速度计算
  9. Honeywell全系列打印机驱动interdriver 2019.M-3
  10. 页眉怎么添加【节】,设置不同章节不同页眉
  11. js网页繁体简体转换(备忘)
  12. sendto()_Linux C函数
  13. dhtml_DHTML乌托邦:使用JavaScript和DOM的现代Web设计
  14. python爬虫打造_Python爬虫与AI结合,打造诗歌接龙程序!
  15. Numpy给数组增加维度的操作
  16. VS中调试QT项目报错合集
  17. 第五章Table(3)
  18. 如何在Swift中使用Result
  19. BMZCTF:just_play
  20. 知识图谱推理思维导图

热门文章

  1. 论计算机取证工具软件及其检测(转)
  2. Windows 11最新版中恢复IE11浏览器的方法2023更新
  3. 立冬出生的宝宝取名大全测试打分准不准
  4. 沪上首座“区块链生态谷”揭开面纱!
  5. Spark 中 JVM 内存使用及配置详情、spark报错与调优、Spark内存溢出OOM异常
  6. Detail information about Withholding Tax in SAP
  7. IBM 成立 | 历史上的今天
  8. 计算机应用基础1010转换为10进制,大学计算机应用基础期末考试试题及答案
  9. 【设计方法论】OOP设计原则
  10. PTA - [第四届团体程序设计天梯赛]PTA使我精神焕发