@Import 注解可以普通类导入到 IoC容器中。其中支持三种导入方式
- 直接导入类
- ImportSelector
- ImportBeanDefinitionRegistrar
下面分别以例子程序的方式来展示其用法
测试工程
package com.example.demo;
public class DemoApplication {
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(ImportConfig.class);
String[] beanDefinitionNames = ctx.getBeanDefinitionNames();
for (String name : beanDefinitionNames) {
System.out.println(name);
}
}
}
直接导入类
public class Student {
}
配置类的写法
@Configuration
@Import(Student.class)
public class ImportConfig {
}
备注:一定需要加入配置类
ImportSelector
public class MySelector implements ImportSelector {
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
return new String[]{"com.example.demo.Student"};
}
}
配置类的写法
@Configuration
@Import(MySelector.class)
public class ImportConfig {
}
ImportBeanDefinitionRegistrar
public class MyBeanDefinitionRegistrat implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
BeanDefinition beanDefinition = new RootBeanDefinition(Person.class);
registry.registerBeanDefinition("student", beanDefinition);
}
}
@Configuration
@Import(MyBeanDefinitionRegistrat.class)
public class ImportConfig {
}