Skip to content

高级 Java 配置

在响应式栈中查看等效项

@EnableWebMvc 导入了 DelegatingWebMvcConfiguration,它:

  • 为 Spring MVC 应用程序提供默认的 Spring 配置。
  • 检测并委派给 WebMvcConfigurer 实现以自定义该配置。

对于高级模式,您可以移除 @EnableWebMvc 并直接继承 DelegatingWebMvcConfiguration,而不是实现 WebMvcConfigurer,如下例所示:

java
@Configuration
public class WebConfiguration extends DelegatingWebMvcConfiguration {

	// ...
}
kotlin
@Configuration
class WebConfiguration : DelegatingWebMvcConfiguration() {

	// ...
}

您可以保留 WebConfig 中现有的方法,但现在您还可以重写基类中的 bean 声明,并且在类路径上仍然可以拥有任意数量的其他 WebMvcConfigurer 实现。


补充教学

1. 这种模式与 WebMvcConfigurer 的区别?

  • WebMvcConfigurer: 就像是给现成的机器“加配件”。你只需实现接口,Spring 就会调用你的回调方法来修改现有配置。
  • DelegatingWebMvcConfiguration: 则是“接管这台机器”。通过继承它,你可以通过 @Bean 注解重写父类中定义的底层组件(如 RequestMappingHandlerMappingHandlerExceptionResolver)。

2. 什么时候应该使用它?

只有当你发现 WebMvcConfigurer 提供的方法已经无法满足你的定制需求,或者你需要手动控制某些核心 Bean 的创建逻辑时,才考虑使用这种模式。对于 95% 的应用来说,使用接口方式已经绰绰有余。

3. 注意点

直接继承 DelegatingWebMvcConfiguration 会导致 @EnableWebMvc 失效。不要在同一个配置类上同时使用这两者,否则会导致配置冲突或重复注册。

Based on Spring Framework.