在构建 Spring Boot 应用时,我们通常借助 @Configuration 注解类来集中管理 Bean
的创建与各项框架配置。不过,将所有配置堆积在单一类中并非最佳实践。

更优雅的做法是将配置按功能模块进行拆分,形成多个独立的配置类。例如,一个项目可以包含:

  • MainConfiguration:应用主配置
  • DataSourceConfiguration:数据源与数据库连接池配置
  • RedisConfiguration:Redis 客户端与连接配置
  • MongoDBConfiguration:MongoDB 相关配置

此时,@Import 注解便成为了模块化装配的利器。让我们先查看其核心定义:


@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Import {
    Class<?>[] value();
}

通过 @Import,我们可以引入以下三种类型的组件:

  1. 标注了 @Configuration 的配置类
  2. 实现了 ImportSelector 接口的动态选择器
  3. 实现了 ImportBeanDefinitionRegistrar 接口的注册器

基础用法示例:直接导入配置类


@Configuration
@Import({RedisConfiguration.class, DataSourceConfiguration.class})
public class MainConfiguration {
    // 主配置逻辑
}

实际上,如果这些配置类都位于组件扫描(@ComponentScan)的路径下,Spring Boot 会自动发现并加载它们。通常我们使用的
@SpringBootApplication 注解已内置了扫描功能,因此无需额外添加。

进阶用法:创建自定义 @Enable* 注解
@Import 的一个典型应用场景是封装自定义的启用注解,这有助于提供更清晰的语义和一站式集成体验。


@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(RedisConfiguration.class) // 关键在此
public @interface EnableRedis {
    // 可以添加一些自定义属性
}

此后,只需在启动类上添加 @EnableRedis,即可轻松启用 Redis 功能模块。

现实挑战:如何处理遗留系统中的大量 XML 配置?
许多现有项目希望迁移至 Spring Boot,但其中积累了大量基于 XML 的 Bean 配置,将其全部转换为 Java Config 工作量巨大。如何实现平滑迁移?

Spring Boot 提供了完美的解决方案:@ImportResource 注解。它允许我们在 Java 配置中直接引入传统的 XML 配置文件。


@Configuration
@ImportResource(locations = "classpath:legacy/application-context.xml")
public class LegacyIntegrationConfiguration {
    // 此类将融合XML中定义的Bean与新的Java配置
}

通过这种方式,原有业务逻辑无需改动,即可逐步享受 Spring Boot 的便利特性。

总结
@Import@ImportResource,Spring Boot 展现了对传统 Spring 项目出色的兼容性与融合能力。无论是整合基于注解的新模块,还是接纳遗留的
XML 配置,Spring Boot 都提供了清晰、无痛的路径,使得技术升级与项目现代化得以稳步推进。