@Import
根据spring 官方API文档描述:
@Import表示要导入的一个或多个@Configuration类。提供与Spring XML中的<import />元素等效的功能。允许导入@Configuration类,ImportSelector和ImportBeanDefinitionRegistrar实现,以及常规组件类。
从Spring Framework 4.2开始,@ Immort还支持对常规组件类的引用,类似于AnnotationConfigApplicationContext.register方法。如果您想避免组件扫描,使用一些配置类作为显式定义所有组件的入口点,这将特别有用。
可以在类级别声明或作为元注释声明。
如果需要导入XML或其他非@Configuration bean定义资源,请改用@ImportResource注释。
1.直接导入@Configuration配置类
// 添加一个简单对象类
public class Director {
}
// 添加配置类并导入上面的简单类
@Configuration
@Import({Director.class})
public class Config {
}
// 添加测试类
public static void main(String[] args) {
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext(Config.class);
Director bean = context.getBean(Director.class);
System.out.println(bean);
}
输入结果如下:
com.example.demo.im.Director@1372ed45
2.导入ImportSelector实现类
这里我们不叙述关于ImportSelector相关内容,将在另一篇文章中单独叙述。这里我们只使用。 主要是参考 spring 官方 API 文档。
添加ImportSelector实现:
public class MyImportSelector implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
return new String[]{"com.example.demo.im.Director"};
}
}
修改配置类,导入自定义ImportSelector:
@Configuration
@Import({MyImportSelector.class})
public class Config {
}
运行main方法得到如下输出:
com.example.demo.im.Director@4d49af10
3.实现ImportBeanDefinitionRegistrar
实现:
public class Register implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata,
BeanDefinitionRegistry registry) {
RootBeanDefinition definition = new RootBeanDefinition(Director.class);
registry.registerBeanDefinition("director", definition);
}
}
修改配置类:
@Configuration
@Import({Register.class})
public class Config {
}
运行main方法:
com.example.demo.im.Director@25359ed8