Spring 3.0之前,创建Bean可以通过xml配置文件与扫描特定包下面的类来将类注入到Spring IOC容器内。而在Spring 3.0之后提供了JavaConfig的方式,也就是将IOC容器里Bean的元信息以java代码的方式进行描述。
1 | (ElementType.TYPE) |
@Import可以配合 Configuration ,ImportSelector, ImportBeanDefinitionRegistrar 来使用, 表示也可以把Import当成普通的Bean使用,@Import只允许放到类上面,不能放到方法上。
普通使用
1 |
|
这种方式有一些问题,那就是只能使用类的无参构造方法来创建bean,对于有参数的构造方法就不行了。
结合ImportBeanDefinitionRegistrar接口
1 | public interface ImportBeanDefinitionRegistrar { |
使用一个类来实现这个接口
1 | public class BookServiceBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar { |
接着我们在@Import注解引入的地方只需要修改为引入UserServiceBeanDefinitionRegistrar
1 |
|
这样就把bookService注入到IOC。
结合ImportSelector接口
ImportSelector接口是至spring中导入外部配置的核心接口,在SpringBoot的自动化配置和@EnableXXX(功能性注解)都有它的存在
ImportSelector接口的源码如下:
1 | public interface ImportSelector { |
@Import注解是将指定的Bean加入到IOC容器之中进行管理,ImportSelector接口只有一个selectImports方法,该方法将返回一个数组,也就是类实例名称,@Import注解将会把返回的Bean加入到IOC容器中进行管理。
示例:
1 | public class MySelector implements ImportSelector { |
这样就可以动态注入一些信息。