有时我们需要在某个配置类中引入其他类,而导入的类也会被添加到spring容器中。这时,可以使用注解@Import来完成这个功能。
如果你看一下它的源代码,你会发现导入的类支持三种不同的类型。
但我认为最好分别解释普通类和@Configuration注解的配置类,所以列出了四种不同类型。
1、普通类
这种引入方法是最简单的,导入的类将被实例化为一个bean对象。
public class A { |
通过@Importannotations引入A类,spring可以自动实例化A对象,然后通过注解在需要使用的地方@Autowiredinject它们:
@Autowired |
这是否令人惊讶?@Bean可以在没有注解的情况下被实例化。
2、 配置类
这种介绍方法是最复杂的,因为@Configurationannotations还支持各种组合注解,如:
- @Import
- @ImportResource
- @PropertySource
public class A { |
用@Configuration注解的配置类是通过@Import注解导入的,与配置类相关的注解@Import、@ImportResource所引入的类将被一次性递归引入。
3、 ImportSelector
这个导入方法需要实现ImportSelector接口
public class AImportSelector implements ImportSelector { |
这个方法的好处是,selectImports方法返回一个数组,这意味着可以同时引入多个类,这非常方便。
4、 ImportBeanDefinitionRegistrar
这个导入方法需要实现ImportBeanDefinitionRegistrar接口。
public class AImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar { |
这个方法是最灵活的。容器注册对象可以在该方法中获得registerBeanDefinitionsobtained,BeanDefinition的创建和注册可以手动控制BeanDefinitionRegistry