@Import通过快速导入的方式实现把实例加入spring的IOC容器中
@Import注解的作用和在使用spring的xml配置时用到的类似。但应注意是@Import在使用时,
必须要保证能被IOC容器扫描到,所以通常它会和@Configuration或者@ComponentScan配套使用。
@Import在使用时可以声明在JAVA类上,或者作为元注解使用(即声明在其他注解上)
@Import注解有三种用法
直接导入@Configuration配置类
public class Dog {
public void run() {
System.out.println("Dog run");
}
}
@Import(Dog.class)
@Configuration
public class AppConfig {
}
// 测试类
public class annoTest {
private static AnnotationConfigApplicationContext classPath;
@Test
public void testConsutrator(){
classPath = new AnnotationConfigApplicationContext(AppConfig.class);
Dog exampleBean = classPath.getBean(Dog.class);
System.out.println(exampleBean);
}
}
导入实现了ImportSelector的类
返回值: 就是我们实际上要导入到容器中的组件全类名
参数: AnnotationMetadata表示当前被@Import的类上的所有注解信息
public class MyImportSelector implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
Set<String> annotationTypes = annotationMetadata.getAnnotationTypes();
for (String str:annotationTypes) {
System.out.println(str);
}
return new String[]{"com.picc.spring.annotation.Dog"};
}
}
@Import({MyImportSelector.class})
@Configuration
public class AppConfig {
}
public class annoTest {
private static AnnotationConfigApplicationContext classPath;
@Test
public void testConsutrator(){
classPath = new AnnotationConfigApplicationContext(AppConfig.class);
Dog exampleBean = classPath.getBean(Dog.class);
System.out.println(exampleBean);
}
}
导入实现了ImportBeanDefinitionRegistrar的类
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {
Set<String> annotationTypes = annotationMetadata.getAnnotationTypes();
for (String str:annotationTypes) {
System.out.println(str);
}
RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(Dog.class);
beanDefinitionRegistry.registerBeanDefinition("dog",rootBeanDefinition);
}
}
@Import({MyImportBeanDefinitionRegistrar.class})
@Configuration
public class AppConfig {
}