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
Spring源码窥探之:ImportBeanDefinitionRegistrar的更多相关文章
- Spring源码窥探之:注解方式的AOP原理
AOP入口代码分析 通过注解的方式来实现AOP1. @EnableAspectJAutoProxy通过@Import注解向容器中注入了AspectJAutoProxyRegistrar这个类,而它在容 ...
- Spring源码窥探之:声明式事务
1. 导入驱动,连接池,jdbc和AOP的依赖 <!-- c3p0数据库连接池 --> <dependency> <groupId>c3p0</groupId ...
- Spring源码窥探之:AOP注解
AOP也就是我们日常说的@面向切面编程,看概念比较晦涩难懂,难懂的是设计理念,以及这样设计的好处是什么.在Spring的AOP中,常用的几个注解如下:@Aspect,@Before,@After,@A ...
- Spring源码窥探之:@Profile
Spring为我们提供的多环境启动 1. 配置类,注入三个不同环境的数据源,并加上注解 /** * description: 以下准备了三套不同环境的数据源 * * @author 70KG * @d ...
- Spring源码窥探之:Spring AOP初步使用
AOP即面向切面编程.它的底层实际是用了spring的动态代理,具体是JDK的代理还是CGLIB的代理,就视情况而定了.本博客园仅仅作为平时记录,显得有些杂乱无章,如果想了解动态代理,设计模式,请访问 ...
- Spring源码窥探之:@Value
1. 首先定义实体 /** * @author 70KG * @Title: Apple * @Description: 苹果实体 * @date 2018/10/22下午9:26 * @From w ...
- Spring源码窥探之:BeanPostProcessor
Spring的Bean后置处理器 1. 实体类 /** * @author 70KG * @Title: Train * @Description: * @date 2018/7/23下午11:31 ...
- Spring源码窥探之:Spring AOP初步
AOP(Aspect Oriented Programming):即我们常说的面向切面编程. 什么是AOP?AOP是在我们原来写的代码的基础上,进行一定的包装,比如在方法执行前.方法返回后.方法抛出异 ...
- Spring源码窥探之:单实例Bean的创建过程
finishBeanFactoryInitialization(beanFactory);初始化剩下的所有的单实例(非懒加载)Bean(Instantiate all remaining (non-l ...
随机推荐
- golang面对接口
- golang --iota 用法
package main import "fmt" func main() { const ( a = iota //0 b //1 c //2 d = "ha" ...
- GRE
第一个技术是GRE,全称Generic Routing Encapsulation,它是一种IP-over-IP的隧道技术.它将IP包封装在GRE包里,外面加上IP头,在隧道的一端封装数据包,并在通路 ...
- git push proxy 取消不掉 can not prox....
使用这个折腾了半天 git config --global --unset http.proxy git config --global --unset https.proxy 没用,原来实现项目目录 ...
- Mybatis中三种关联关系的实现
目录 一对一查询 一对多查询 自关联查询: 多对多查询 总结: 三种关联关系:一对多,一对一,多对多 两种查询方式:嵌套查询,连接查询(也可称作:多表单独查询,多表连接查询) 每一种关联关系都可以通过 ...
- Java中BIO和NIO
同步/异步.阻塞/非阻塞概念 同步异步 同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication) 同步:在发出一个 ...
- DEDECMS标签笔记
注意点: 1.dede的标签不可以嵌套(除了channelartlist里面可以嵌套指定的标签),那么当需要使用{dede:global.cfg_webname/}dede标签的时候我们需要转换成[f ...
- 如何通过Restful API的方式读取SAP Commerce Cloud的Product图片
需求:我在SAP Commerce Cloud的backoffice里给某product维护了一些图片: 分别位于Normal,Thumbnails和Others等字段: 现在我想通过Restful ...
- XnViewer管理浏览照片、图片
有时候拍完照片想要浏览照片.浏览照片的时候想做一些标记,这个时候就需要使用照片管理器: 之前一直使用谷歌的picasa(不更新了),adobe也有个管理器(比较大):这里主要推荐一个: https:/ ...
- 输入web网站点击之后发生的事情
(1)用户在浏览器(客户端)里输入或者点击一个连接: (2)浏览器向服务器发送HTTP请求: (3)服务器处理请求,如果查询字符串或者请求体里含有参数,服务器也会把这些参数信息考虑进去: (4)服务器 ...