跳到主要内容SpringBoot 中 SpringMVC 自动配置与扩展 | 极客日志Javajava
SpringBoot 中 SpringMVC 自动配置与扩展
SpringBoot 项目默认启用 SpringMVC 自动配置,无需手动添加 mvc:annotation-driven。开发者可通过实现 WebMvcConfigurer 接口自定义配置,如日期格式化、拦截器等。继承 WebMvcConfigurerAdapter 可简化开发,但需注意其已废弃。避免继承 WebMvcConfigurationSupport 类,否则会导致自动配置失效,需手动重写所有方法。正确理解条件注解 @ConditionalOnMissingBean 有助于掌握自动配置原理。
云间运维93 浏览 从 XML 配置到注解配置
旧版本常使用 XML 配置:
<mvc:annotation-driven message-codes-resolver="bean ref" validator="" conversion-service=""></mvc:annotation-driven>
现代方式推荐如下:
@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addFormatter(new DateFormatter("yyyy-MM-dd HH:mm:ss"));
}
}
注意:不需要再次在配置中指定 <mvc:annotation-driven /> 或者是配置类中添加 @EnableWebMvc,因为这样配置会让 Spring Boot 不再装配 Spring MVC 相关的配置,又回到了自己配置 SpringMVC 的传统老路,体现不了采用 SpringBoot 的好处。
我们可以继承 WebMvcConfigurerAdapter 来添加我们的自定义配置。
WebMvcConfigurerAdapter 源码参考
public abstract class WebMvcConfigurerAdapter implements WebMvcConfigurer {
public WebMvcConfigurerAdapter() { }
public void { }
{ }
{ }
{ }
{ }
{ }
{ }
{ }
{ }
{ }
{ }
{ }
{ }
{ }
{ }
{ }
Validator { ; }
MessageCodesResolver { ; }
}
configurePathMatch
(PathMatchConfigurer configurer)
public
void
configureContentNegotiation
(ContentNegotiationConfigurer configurer)
public
void
configureAsyncSupport
(AsyncSupportConfigurer configurer)
public
void
configureDefaultServletHandling
(DefaultServletHandlerConfigurer configurer)
public
void
addFormatters
(FormatterRegistry registry)
public
void
addInterceptors
(InterceptorRegistry registry)
public
void
addResourceHandlers
(ResourceHandlerRegistry registry)
public
void
addCorsMappings
(CorsRegistry registry)
public
void
addViewControllers
(ViewControllerRegistry registry)
public
void
configureViewResolvers
(ViewResolverRegistry registry)
public
void
addArgumentResolvers
(List<HandlerMethodArgumentResolver> argumentResolvers)
public
void
addReturnValueHandlers
(List<HandlerMethodReturnValueHandler> returnValueHandlers)
public
void
configureMessageConverters
(List<HttpMessageConverter<?>> converters)
public
void
extendMessageConverters
(List<HttpMessageConverter<?>> converters)
public
void
configureHandlerExceptionResolvers
(List<HandlerExceptionResolver> exceptionResolvers)
public
void
extendHandlerExceptionResolvers
(List<HandlerExceptionResolver> exceptionResolvers)
public
getValidator
()
return
null
public
getMessageCodesResolver
()
return
null
不推荐使用 WebMvcConfigurationSupport 类
也可以配置类继承于 WebMvcConfigurationSupport 类即可,但不推荐。
@Configuration
@ConditionalOnWebApplication
@ConditionalOnClass({Servlet.class, DispatcherServlet.class, WebMvcConfigurerAdapter.class})
@ConditionalOnMissingBean({WebMvcConfigurationSupport.class})
@AutoConfigureOrder(-2147483638)
@AutoConfigureAfter({DispatcherServletAutoConfiguration.class, ValidationAutoConfiguration.class})
public class WebMvcAutoConfiguration {
public static final String DEFAULT_PREFIX = "";
public static final String DEFAULT_SUFFIX = "";
public WebMvcAutoConfiguration() { }
}
这是因为在 Spring Boot 的 Web 自动配置类 WebMvcAutoConfiguration 上有条件注解 @ConditionalOnMissingBean(WebMvcConfigurationSupport.class)。这个注解的意思是在项目类路径中缺少 WebMvcConfigurationSupport 类型的 bean 时该自动配置类才会生效,所以继承 WebMvcConfigurationSupport 后需要自己再重写相应的方法。
相关免费在线工具
- Keycode 信息
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
- Escape 与 Native 编解码
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
- JavaScript / HTML 格式化
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
- JavaScript 压缩与混淆
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online