SpringBoot 提供了 三种使用 @Import 将 类实例注入至 Spring IOC Container中 的实例。
1:直接注入
@Component
@Import({Customer.class,Broker.class})
/**
*使用Import 将指定的类的实例注入至Spring 容器中
*/
public class ImportDirect {
}
2:实现 ImportBeanDefinitionRegistrar 接口 注入
/**
* registerBeanDefinitions 方法中的参数 BeanDefinitionRegistry 可以往Spring IOC Container 中动态地装配Bean
*/
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
//手动注入 Forwards 类的实例
BeanDefinitionBuilder beanDef_forwards = BeanDefinitionBuilder.rootBeanDefinition(Forwards.class);
registry.registerBeanDefinition("forwards", beanDef_forwards.getBeanDefinition());
}
3:实现 ImportSelector 注入
//自定义逻辑返回需要导入的组件
public class MyImportSelector implements ImportSelector {
// 返回值就是导入到容器中的组件全类名
// AnnotationMetadata:当前标注@Import注解的类的所有注解信息
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
return new String[] { "test.spring.ZhangSan", "test.spring.LiSi", "test.spring.WangWu" };
}