来介绍@Import注解的使用之前,我们先看源码:
1  | java复制代码@Target(ElementType.TYPE)  | 
从注释中,我们可以看到@Import注解可以将@Configuration、ImportSelector、ImportBeanDefinitionRegistrar和普通的component类导入。
准备Spring环境
Spring依赖
1  | xml复制代码<dependency>  | 
导入@Configuration类
需要导入的bean:Hello
1  | java复制代码public class Hello {  | 
配置类:HelloConfiguration
1  | java复制代码@Configuration  | 
启动类:SpringTestApplication
1  | java复制代码@Import(HelloConfiguration.class)  | 
启动之后,控制台输出如下:
1  | arduino复制代码hello word  | 
说明Hello对象确实通过@Import注解注入到了容器中。
导入ImportSelector
ImportSelector实现类:HelloImportSelector
ImportSelector是一个接口,实现这个接口需要重写selectImports方法。
selectImports方法会返回一个String数组。这个数组包含的元素是需要被导入容器中的类的全限定名。
下面我们实现ImportSelector接口并重写selectImports方法,将Hello类的全限定名返回。
1  | java复制代码public class HelloImportSelector implements ImportSelector {  | 
启动类:SpringTestApplication
1  | java复制代码@Import(HelloImportSelector.class)  | 
启动之后,控制台输出如下:
1  | arduino复制代码hello word  | 
导入ImportBeanDefinitionRegistrar
ImportBeanDefinitionRegistrar实现类:HelloImportDefinitionRegistrar
1  | java复制代码public class HelloImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {  | 
启动类:SpringTestApplication
1  | java复制代码@Import(HelloImportBeanDefinitionRegistrar.class)  | 
启动之后,控制台输出如下:
1  | arduino复制代码hello word  | 
直接导入Bean
启动类:SpringTestApplication
1  | java复制代码@Import(Hello.class)  | 
启动之后,控制台输出如下:
1  | arduino复制代码hello word  | 
本文转载自: 掘金