spring组件---8

第10小节:ImportBeanDefinitionRegistrar接口,该接口中有个方法registerBeanDefinitions,通过调用这个方法可以给容器中自己来添加一些方法,这个方法有个参数AnnotationMetadata,包含当前类的注解信息,BeanDefinitionRegistry:bean定义的注册类,可以通过它给容器中添加bean

.写一个类MyImportBeanDefinitionRegisterar继承 ImportBeanDefinitionRegistrar

在这个类中实现的逻辑是:
判断是否有red和blue组件,如果有则加rainbow加入到容器中:
public class MyImportBeanDefinitionRegisterar implements ImportBeanDefinitionRegistrar {
/**
*
* @param annotationMetadata 当前类的注解信息,当前类的其他信息都能获取到
* @param beanDefinitionRegistry :beanDefinitionRegistry注册类
* 把所有需要添加到容器中的bean,调用BeanDefinitionRegistry.registerBeanDefinition()手工注册进来
*/
public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {
//判断在容器中是否有color类,red类
boolean definition1=beanDefinitionRegistry.containsBeanDefinition(“red”);
boolean definition2=beanDefinitionRegistry.containsBeanDefinition(“blue”);
if(definition1&&definition2){
RootBeanDefinition beanDefinition=new RootBeanDefinition(RainBow.class);
beanDefinitionRegistry.registerBeanDefinition(“rainBow”,beanDefinition);
}
}
}

测试类:
@Test
public void testImport(){
printBeans(applicationContext);
Blue bean= applicationContext.getBean(Blue.class);
System.out.println(bean);
}

测试结果:
mainConfig2
com.atguigu.bean.Color
com.atguigu.bean.Red
com.atguigu.bean.Blue
com.atguigu.bean.Yellow
com.atguigu.bean.Blue@7c417213

测试小结:因为容器中red和blue的类名是大写,所以,容器中没有添加rainbow组件

修改MyImportBeanDefinitionRegisterar类中的注册方法registerBeanDefinitions()的判断条件:
boolean definition1=beanDefinitionRegistry.containsBeanDefinition(“com.atguigu.bean.Red”);
boolean definition2=beanDefinitionRegistry.containsBeanDefinition(“com.atguigu.bean.Red”);

public class MyImportBeanDefinitionRegisterar implements ImportBeanDefinitionRegistrar {
/**
*
* @param annotationMetadata 当前类的注解信息,当前类的其他信息都能获取到
* @param beanDefinitionRegistry :beanDefinitionRegistry注册类
* 把所有需要添加到容器中的bean,调用BeanDefinitionRegistry.registerBeanDefinition()手工注册进来
*/
public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {
//判断在容器中是否有color类,red类
boolean definition1=beanDefinitionRegistry.containsBeanDefinition(“com.atguigu.bean.Red”);
boolean definition2=beanDefinitionRegistry.containsBeanDefinition(“com.atguigu.bean.Red”);
if(definition1&&definition2){
//指定bean定义信息,(bean的类型。bean的scope。。。。。)
RootBeanDefinition beanDefinition=new RootBeanDefinition(RainBow.class);
//注册一个bean,指定bean名
beanDefinitionRegistry.registerBeanDefinition(“rainBow”,beanDefinition);
}
}
}

测试类不变
测试结果:
mainConfig2
com.atguigu.bean.Color
com.atguigu.bean.Red
com.atguigu.bean.Blue
com.atguigu.bean.Yellow
rainBow
com.atguigu.bean.Blue@6ab7a896

测试结果小结:因为容器中存在red和blue组件中,所以添加了rainbow组件

@Import【快速给容器中导入一个组件】

@Import(要导入到容器中的组件)
@ImportSelector:返回需要导入的组件的全类名数组
@ImportBeanDefinitionRegisterar:手动注册bean到容器中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值