@Import出现的背景
目前为止,注解的方式批量注册bean,前面2篇文章中,我们介绍了2种方式:
到目前,我们知道的批量定义bean的方式有2种:
- @Configuration结合@Bean注解的方式
- @CompontentScan扫描包的方式
下面我们来看几个问题。
问题1
如果需要注册的类是在第三方的jar中,那么我们如果想注册这些bean有2种方式:
- 通过@Bean标注方法的方式,一个个来注册
- @CompontentScan的方式:默认的@CompontentScan是无能为力的,默认情况下只会注册
@Compontent标注的类,此时只能自定义@CompontentScan中的过滤器来实现了
这2种方式都不是太好,每次有变化,调整的代码都比较多。
问题2
通常我们的项目中有很多子模块,可能每个模块都是独立开发的,最后通过jar的方式引进来,每个模块
中都有各自的@Configuration、@Bean标注的类,或者使用@CompontentScan标注的类,被
@Configuration、@Bean、@CompontentScan标注的类,我们统称为bean配置类,配置类可以用
来注册bean,此时如果我们只想使用其中几个模块的配置类,怎么办?
@Import可以很好的解决这2个问题,下面我们来看@Import怎么玩的
@Import使用
先看Spring对它的注释,总结下来作用就是和xml配置的 标签作用一样,允许通过它引入
@Configuration标注的类 , 引入ImportSelector接口和ImportBeanDefinitionRegistrar接口的实现,
也包括 @Component注解的普通类。
总的来说:@Import可以用来批量导入需要注册的各种类,如普通的类、配置类,完后完成普通类和
配置类中所有bean的注册。