1、WebMvcConfigurer 接口

需要实现什么功能,只要重写对于的方法即可

  1. @Configuration
  2. @ComponentScan("com.sourceflag.spring.mvc")
  3. @EnableWebMvc // <mvc:annotation-driven/>
  4. public class AppConfig implements WebMvcConfigurer {
  5. /**
  6. * 视图处理
  7. */
  8. @Override
  9. public void configureViewResolvers(ViewResolverRegistry registry) {
  10. registry.jsp("/page/", ".html");
  11. }
  12. /**
  13. * 解析器添加
  14. */
  15. @Override
  16. public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
  17. FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
  18. converters.add(fastJsonHttpMessageConverter);
  19. }
  20. }

2、WebMvcConfigurerAdapter 实现类(过时)

WebMvcConfigurerAdapter 其实就是实现了 WebMvcConfigurer 接口,是由于 JDK 1.8 以前接口是不可以有默认实现类的,所以出了一个 WebMvcConfigurerAdapter 类,所以现在已经过时了

  1. @Deprecated
  2. public abstract class WebMvcConfigurerAdapter implements WebMvcConfigurer {
  3. @Override
  4. public void configurePathMatch(PathMatchConfigurer configurer) {
  5. }
  6. // ...
  7. }

3、WebMvcConfigurationSupport 实现类

这个类很特殊,实现了 ApplicationContextAware 和 ServletContextAware 接口, 提供了一些默认实现,同时提供了很多 @Bean 方法,但是并没有提供 @Configureation 注解,所以这些 @Bean 并不会生效,所以我们需要继承这个类,并在我们提供的类上提供 @Configureation 注解才能生效

  1. public class WebMvcConfigurationSupport implements ApplicationContextAware, ServletContextAware {
  2. @Bean
  3. public PathMatcher mvcPathMatcher() {
  4. return getPathMatchConfigurer().getPathMatcherOrDefault();
  5. }
  6. // ...
  7. }

4、@EnableWebMvc 注解

  1. @Retention(RetentionPolicy.RUNTIME)
  2. @Target(ElementType.TYPE)
  3. @Documented
  4. @Import(DelegatingWebMvcConfiguration.class)
  5. public @interface EnableWebMvc {
  6. }

通过 @Import 导入了 DelegatingWebMvcConfiguration.class 类

  1. @Configuration(proxyBeanMethods = false)
  2. public class DelegatingWebMvcConfiguration extends WebMvcConfigurationSupport {
  3. }

这样我们就看的很清楚了,他直接继承了 WebMvcConfigurationSupport,同时也提供了 @Configuration 注解

使用

  • 方式一:@EnableWebMvc + WebMvcConfigurer 接口的实现类
  • 方式二:继承 WebMvcConfigurationSupport 类 + @Configuration 注解
  • 方式三:WebMvcConfigurer 接口的实现类 + @Configuration 注解