配置类 (Configuration Classes)
Spring Boot 提倡基于 Java 的配置。虽然你可以通过 SpringApplication 使用 XML 源,但我们通常建议你的主要配置源是一个单一的 @Configuration 类。通常,定义 main 方法的类是作为主要 @Configuration 的最佳选择。
提示
互联网上发布的许多 Spring 配置示例都使用了 XML 配置。如果可能,请务必尝试使用等效的基于 Java 的配置。搜索以 @Enable* 开头的注解通常是一个很好的起点。
1. 导入额外的配置类
你不需要将所有的 @Configuration 都写在一个类中。你可以使用 @Import 注解来导入其他的配置类。另外,你也可以使用 @ComponentScan 来自动拾取所有的 Spring 组件,包括 @Configuration 类。
2. 导入 XML 配置
如果你必须使用基于 XML 的配置,我们建议你仍然从一个 @Configuration 类开始。然后,你可以使用 @ImportResource 注解来加载 XML 配置文件。
补充教学
1. 为什么弃用 XML?
在 Spring 的早期,XML 被认为是解耦配置和代码的好方法。但随着应用规模变大,XML 变得极其臃肿且难以维护(没有编译时检查)。基于 Java 的配置支持强类型检查、IDE 代码补全以及更自然的编程逻辑,这使得配置本身也变得可维护。
2. @Configuration 其实也是一个 Bean
带有 @Configuration 注解的类本身会被注册到 Spring 上下文中,并且默认是单例的。Spring 会通过 CGLIB 代理来增强这个类,确保你在类内部通过调用方法获取其他 @Bean 时,始终拿到的是同一个实例,从而维护了单例语义。
3. 我该如何找到 XML 对应的 Java 配置?
绝大多数第三方库在升级到 1.x/2.x 之后都提供了 Java Config 的支持。例如,以前的 <tx:annotation-driven /> 现在对应的是 @EnableTransactionManagement。如果你在迁移过程中找不到对应的注解,可以查看该库的官方文档或对应的 Spring Boot Starter 源码,通常 Starter 会帮你搞定这些配置。