@import 是 spring 中声明式导入配置的轻量机制,支持直接导入第三方配置类、普通组件类、importselector 动态选配及 importbeandefinitionregistrar 手动注册 bean。

在 Spring 中,@Import 是一个轻量、灵活的配置导入机制,适合将第三方库的配置类、自定义组件或条件化 Bean 注册逻辑引入当前应用上下文。它不依赖 XML 或 @Configuration 类的显式继承,而是通过 Java Config 方式直接“声明式”注入。
直接导入第三方配置类(最常用)
如果第三方库提供了标注了 @Configuration 的配置类(如 RedisAutoConfiguration 或某些 SDK 自带的 XXXConfig),可直接用 @Import 引入:
- 确保该类是 public、非 final、有无参构造器(Spring 需要实例化)
- 在主配置类或启动类上添加注解:
@Import({ThirdPartyConfig.class, AnotherConfig.class}) - Spring 会自动执行其
@Bean方法,并注册所有定义的 Bean
导入普通组件类(无 @Configuration)
即使一个类没有 @Configuration,只要它是普通 Java 类(含 public 构造方法),@Import 也能将其作为单例 Bean 注入容器:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- Spring 会调用其默认构造器创建实例,等效于
@Component - 适用于简单工具类、客户端实例(如
OkHttpClient、RestTemplate等) - 注意:这类类无法使用
@Bean、@Value或@Autowired(除非额外加@Configurable或启用 AOP)
使用 ImportSelector 动态选择配置
当需要根据环境、属性或条件决定导入哪些配置时,实现 ImportSelector 接口:
- 重写
selectImports(AnnotationMetadata),返回全限定类名字符串数组 - 可在方法内读取
@Value、@ConditionalOnProperty等逻辑判断 - 例如:根据
spring.profile.active=dev导入测试专用配置类
使用 ImportBeanDefinitionRegistrar 手动注册 Bean
这是最底层、最灵活的方式,适用于需要完全控制 Bean 定义注册过程的场景(如适配老版本 SDK、泛型 Bean 注册、动态代理增强):
- 实现
ImportBeanDefinitionRegistrar,在registerBeanDefinitions中操作BeanDefinitionRegistry - 可结合
AnnotationMetadata获取导入位置的注解信息 - 常见于 Spring Boot Starter 的自动配置(如
MyBatisAutoConfiguration内部就用到了类似机制)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










