@Import的第二种接口ImportBeanDefinitionRegistrar
直接看例子
同样写一个需要注册的类
public class Red {
}
写一个类实现ImportBeanDefinitionRegistrar接口
package chd.condition;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;
import spring.Red;
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar{
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
// containsBeanDefinition可以判断容器中是否存在组件(注意:要全类名)
boolean definition1 = registry.containsBeanDefinition("spring.Color");
if(definition1) {
//指定Bean定义信息,bean类型,作用域等
RootBeanDefinition beanDefinition = new RootBeanDefinition(Red.class);
//注册一个Bean,指定bean名
registry.registerBeanDefinition("red1", beanDefinition);
}
}
}
在配置类中@Import中加入实现类
@Configuration
@Import({Color.class,MyImportBeanDefinitionRegistrar.class})//@Import导入组件,容器中就会自动注册这个组件,id就是类名
public class MainConfig2 {
}
测试类测试一下
@Test
public void Test3() {
String[] names=applicationContext.getBeanDefinitionNames();
for (String na : names) {
System.out.println(na);
}
}