该注解的直接作用是向spring容器中添加bean,跟用@Configuration注解类的@bean方法效果一样,但该注解需要跟@Configuration联合使用,不然无法见效,如下实例:
/**
* Created by allen on 2019/6/14.
* 直接导入未注解的常规类可以被实例化
* 直接导入未注解的在ImportSelector中注册的类可以被实例化
* 直接导入未注解的在ImportBeanDefinitionRegistrar中注册的类可以被实例化
*/
@Configuration
@Import({UnAnnotationClass.class,MyImportSelector.class,MyImportBeanDefinitionRegistrar.class})
public class MyImportConfig {
public MyImportConfig() {
System.out.println("初始化MyImportConfig");
}
}
//注解的常规类
public class UnAnnotationClass {
public UnAnnotationClass() {
System.out.println("实例化无注解的类");
}
public String getUnAnnotationName(){
return "不存在任何注解的类1";
}
}
//在ImportSelector中注册的类
public class MyImportSelector implements ImportSelector {
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
return new String[]{"com.allen.springBoot.service.UnAnnotationClass2"};
}
}
//在ImportBeanDefinitionRegistrar中注册的类
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(UnAnnotationClass3.class);
registry.registerBeanDefinition("UnAnnotationClass3", rootBeanDefinition);
}
}
//在控制器中的使用
@Autowired
private UnAnnotationClass unAnnotationClass;
@GetMapping("/getUnAnnotationName")
@ResponseBody
public String getUnAnnotationName1(){
String ret=unAnnotationClass.getUnAnnotationName();
System.out.println("注入不存在如何注解的类 ret:"+ret);
return ret;
}
@Import注解中可以导入不存在如何注解的常规类、在ImportSelector中注册的类、在ImportBeanDefinitionRegistrar中注册的类。在控制器中的使用方式一样,只需要在对象上添加@Autowired注入即可。