SpringBoot自动装配中的@Import注解
@Import是Spring框架提供的注解,用于快速导入一个或多个组件(@Configuration配置类、普通类或ImportSelector/ImportBeanDefinitionRegistrar实现类)。在SpringBoot自动装配机制中,@Import常与@EnableXXX注解配合使用,实现模块化装配。
@Import的三种用法
导入普通类 直接声明需要导入的类,Spring会将其注册为Bean:
@Import({CacheService.class, LoggerService.class})
public class AppConfig {}
导入@Configuration配置类 合并多个配置类,常用于拆分大型配置:
@Import(DatabaseConfig.class)
@Configuration
public class MainConfig {}
导入接口实现类 通过编程方式动态控制Bean的导入:
- ImportSelector 返回需要导入的类名数组
- ImportBeanDefinitionRegistrar 手动注册BeanDefinition
在自动装配中的应用
SpringBoot的@EnableAutoConfiguration底层通过@Import加载AutoConfigurationImportSelector,该实现类会:
自定义自动装配示例
定义自动配置类
@Configuration
@ConditionalOnClass(MyService.class)
public class MyAutoConfiguration {
@Bean
public MyService myService() {
return new MyService();
}
}
注册配置类 在META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports中添加:
com.example.MyAutoConfiguration
使用@Enable注解 通过@Import暴露装配入口:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(MyAutoConfiguration.class)
public @interface EnableMyModule {}
与DeferredImportSelector的配合
SpringBoot扩展了DeferredImportSelector接口,实现配置类的延迟加载:
- 保证核心配置优先初始化
- 支持配置类的分组处理
- 通过getImportGroup()方法实现批处理逻辑
这种机制使得SpringBoot能够有序地处理上百个自动配置类,同时保持启动性能。



