Import注解的作用
大约 2 分钟源码解析bean的注入
作用
注解的定义信息:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Import {
/**
* {@link Configuration @Configuration}, {@link ImportSelector},
* {@link ImportBeanDefinitionRegistrar}, or regular component classes to import.
*/
Class<?>[] value();
}
可以发现,传入参数是一个Class数组。所以,我们可以传入多个Class对象。
查看该注解的注释信息,就可以发现其作用:
- 导入一个或多个组件类——通常是@Configuration类。
- 提供与Spring XML中的元素等效的功能。允许导入
@Configuration
类,ImportSelector
和ImportBeanDefinitionRegistrar
实现,以及常规组件类
。 - 在导入的
@Configuration
类中声明的@Bean
定义应该通过使用@Autowired
注入来访问。可以自动连接bean本身,也可以自动连接声明bean的配置类实例。后一种方法允许在@Configuration类方法之间显式的、ide友好的导航。 - 可以在类级别声明,也可以作为元注释声明。
- 如果需要导入XML或其他non-@Configuration bean定义资源,则使用@ImportResource注释。
也就是说,@Import
注解可以往容器中导入bean,可以根据需要选择不同的方式。
导入@Configuration配置类
SpringBoot默认会扫描主启动类所在的包以及子包下的加了相应注解的bean。如果不是在默认的包下的bean,是不会被加载到容器中的。
这时,我们可以使用@Import
注解导入,此时导入的类可以在任意的包下。
一般用于导入配置类,我们导入一个试试:
// SimpleConfig在com包下,主启动类在com.sanfen包下,不同包
@Configuration
public class SimpleConfig {
@Bean
public User user(){
return new User(1226999203, "zs", 25);
}
}
在主启动类中获取SimpleConfig
和User
,发现没有被扫描到:

我们加上@Import
注解:

发现SimpleConfig
这个配置类被导入了,而且里面定义的bean也被导入了。