扩展MVC组件配置,我们要做的就是编写一个@Configuration
注解类,并且要实现WebMvcConfiguration
接口,而且不能标注@EnableWebMvc
,并且一般我们把这个类放在config包下。然后就可以重写配置方法了。
那么为什么这个类不能添加@EnableWebMvc
注解呢:
点开WebMvcAutoConfiguration类:
我们可以看到一个注解:@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
,这个注解的意思是,如果容器中没有WebMvcConfigurationSupport
这个类,那么自动配置生效,如果存在,那么自动配置全部失效。
那么我们点开@EnableWebMvc
注解:
发现它导入了一个类:DelegatingWebMvcConfiguration
,点开这个类:
我们发现这个类继承了WebMvcConfigurationSupport
,所以一旦加上@EnableWebMvc
这个注解,那么容器中就存在这个类,那么WebMvcAutoConfiguration
的注解@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
就会生效,就会造成MVC自动配置失效。
那么下面来看一下SpringMVC可以扩展配置一些什么:
进入SpringBoot官方文档,可以看到SpringMVC可以扩展出这些自定义模块配置:
视图解析器我们上一篇已经配置过了,那么接下来是Formatter格式化转换器
进入WebMvcAutoConfiguration
类,查找Formatter
:
可以看到,格式化转换器有Properties
,那么就是可以在yaml中配置的,在配置SpringBoot很多组件的时候,首先要看的就是容器中有没有用户自己配置的,如果有就用用户自己配置的,如果没有再用自动配置的。
这就是在yaml中自动配置的时间格式:
spring:
mvc:
format:
time: HH:mm:ss
在MVC中添加格式化组件:
@Override
public void addFormatters(FormatterRegistry registry) {
}
例如我们配置一个视图跳转,将/001页面跳转到/test页面:
package config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* 扩展SpringMVC
*/
@Configuration
public class MvcConfig implements WebMvcConfigurer {
//视图跳转
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/001").setViewName("test");
}
}