@Import(Color.class)可以这样向容器中注册组件,还可以使用ImportSelector接口注册组件,例子如下
先创建两个要注册的类
public class Blue {
}
public class Red{
}
创建一个类实现ImportSelector接口
package chd.condition;
import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.type.AnnotationMetadata;
//自定义逻辑返回需要导入的组件
public class MyImportSelecter implements ImportSelector{
//返回值,就是导入到容器的组件全类名
//AnnotationMetadata:当前标注@Import注解类的所有注解信息
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
// 把待注册的全类名返回
return new String[]{"spring.Blue","spring.Red"};
}
}
在测试类@Import注解中需要加上实现类
@Configuration
@Import({Color.class,MyImportSelecter.class})//@Import导入组件,容器中就会自动注册这个组件,id就是类名
public class MainConfig2 {
}
使用测试类测试一下
@Test
public void Test3() {
String[] names=applicationContext.getBeanDefinitionNames();
for (String na : names) {
System.out.println(na);
}
}