提供与 xml 中 可以在类级别声明或作为元注释声明。如果需要导入XML或其他非@Configuration bean定义资源,请改用@ImportResource注释 将 @Import 标记的类注册成 bean。 通过方法 <import/>等效的功能, 允许去导入@Configuration类, ImportSelector 和 ImportBeanDefinitionRegistrar 的具体实现, 以及常规组件类 。
类似于AnnotationConfigApplicationContext.register(java.lang.Class<?>...) 这种操作。1. 注册具体类
// Test 类 这里不需要任何注解(@Component、@Service)这些都不需要
public class Test {
}
// MyConfig 类
@Configuration
@Import({Test.class})
public class AppConfig {
}
2. 导入@Configuration 配置类下的bean定义
@Configuration
public class AppConfigAux {
// 假设这里内部由很多使用了@Bean注解的方法
}
// AppConfig 类
@Configuration
@Import({AppConfigAux.class})
public class AppConfig {
}
// 开始测试的Test类
public class Test {
public static void main(String[] args) {
new AnnotationConfigApplicationContext(AppConfig.class);
}
}
3. 导入ImportBeanDefinitionRegistrar的具体实现类
registerBeanDefinitions进行注入// AppConfigAux 类 不需要任何注解
public class AppConfigAux implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
registry.registerBeanDefinition("simple",BeanDefinitionBuilder.rootBeanDefinition(Simple.class).getBeanDefinition());
}
}
// AppConfig 类
@Configuration
@Import({AppConfigAux.class})
public class AppConfig {
}
// Simple 类 不需要注解
pulic class Simple {
}
// 开始测试的Test类
public class Test {
public static void main(String[] args) {
new AnnotationConfigApplicationContext(AppConfig.class);
}
}
4. 导入ImportSelector的具体实现
// AppConfigAux 类 不需要任何注解
public class AppConfigAux implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
//返回String[]含义:多个类的完全限定名,表示注入这些类到容器中,bean名称就是类的完全限定名(保证唯一性)
return new String[] { Simple.class.getName() };
}
}
// AppConfig 类
@Configuration
@Import({AppConfigAux.class})
public class AppConfig {
}
// Simple 类 不需要注解
pulic class Simple {
}
// 开始测试的Test类
public class Test {
public static void main(String[] args) {
new AnnotationConfigApplicationContext(AppConfig.class);
}
}