继承WebMvcConfigurationSupport后自动配置不生效及如何配置拦截器

 更新时间:2019年11月21日 14:10:17   作者:fmwind  
这篇文章主要介绍了继承WebMvcConfigurationSupport后自动配置不生效及如何配置拦截器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

网上有很多文章说从spring boot2.0之后在构造spring配置文件时建议推荐直接实现WebMvcConfigurer或者直接继承WebMvcConfigurationSupport ,经测试实现WebMvcConfigurer是没问题,但继承WebMvcConfigurationSupport类是会导致自动配置失效的。

一、继承WebMvcConfigurationSupport类是会导致自动配置失效的原因

在spring boot的自定义配置类继承 WebMvcConfigurationSupport 后,发现自动配置的静态资源路径(classpath:/META/resources/,classpath:/resources/,classpath:/static/,classpath:/public/)不生效。

首先看一下 自动配置类的定义:

这是因为在 springboot的web自动配置类 WebMvcAutoConfiguration 上有条件注解

@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)

这个注解的意思是在项目类路径中 缺少 WebMvcConfigurationSupport类型的bean时改自动配置类才会生效,所以继承 WebMvcConfigurationSupport 后需要自己再重写相应的方法。

如果想要使用自动配置生效,又要按自己的需要重写某些方法,比如增加 viewController ,则可以自己的配置类可以继承 WebMvcConfigurerAdapter 这个类。不过在spring5.0版本后这个类被丢弃了 WebMvcConfigurerAdapter ,虽然还可以用,但是看起来不好。

这是类上的注释,意思是spring 5.0后要使用Java8,而在Java8中接口是可以有default方法的,所以这个类就没必要了。所以我们只需要在自定义配置类中直接实现

二、继承WebMvcConfigurationSupport类如何配置拦截器的

@Configuration
public class MyConfigurer extends WebMvcConfigurationSupport {
 
@Override
 protected void addInterceptors(InterceptorRegistry registry) {
  registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").excludePathPatterns("/emp/toLogin","/emp/login","/js/**","/css/**","/images/**");
  super.addInterceptors(registry);
 }
 
 @Override
 protected void addResourceHandlers(ResourceHandlerRegistry registry) {
  registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
  super.addResourceHandlers(registry);
 }
}

注意这段代码:

registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");

由于继承WebMvcConfigurationSupport后会导致自动配置失效,所以这里要指定默认的静态资源的位置。同时要注意不能写成

registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 解决JPA save()方法null值覆盖掉mysql预设的默认值问题

    解决JPA save()方法null值覆盖掉mysql预设的默认值问题

    这篇文章主要介绍了解决JPA save()方法null值覆盖掉mysql预设的默认值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java内存模型的深入讲解

    Java内存模型的深入讲解

    这篇文章主要给大家介绍了关于Java内存模型的相关资料,我们常说的JVM内存模式指的是JVM的内存分区,而Java内存模式是一种虚拟机规范,需要的朋友可以参考下
    2021-07-07
  • Java中工具Jstack的使用实例

    Java中工具Jstack的使用实例

    jstack用于生成java虚拟机当前时刻的线程快照,下面这篇文章主要给大家介绍了关于Java中工具Jstack使用的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • IDEA2022 提示更新 TKK失败请检查网络连接的问题

    IDEA2022 提示更新 TKK失败请检查网络连接的问题

    这篇文章主要介绍了IDEA2022 提示:更新 TKK 失败,请检查网络连接,本文给大家分享解决方案,对idea2022提示更新TKK失败感兴趣的朋友跟随小编一起看看吧
    2022-11-11
  • 解决idea打包成功但是resource下的文件没有成功的问题

    解决idea打包成功但是resource下的文件没有成功的问题

    这篇文章主要介绍了解决idea打包成功但是resource下的文件没有成功的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • java中BigDecimal用法详解

    java中BigDecimal用法详解

    本文详细讲解了java中BigDecimal的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • spring boot admin 搭建详解

    spring boot admin 搭建详解

    本篇文章主要介绍了spring boot admin 搭建详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • 使用JAVA+Maven+TestNG框架实现超详细Appium测试安卓真机教程

    使用JAVA+Maven+TestNG框架实现超详细Appium测试安卓真机教程

    这篇文章主要介绍了使用JAVA+Maven+TestNG框架实现超详细Appium测试安卓真机教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Java中集合List、Set和Map的入门详细介绍

    Java中集合List、Set和Map的入门详细介绍

    Java集合主要分为三种类型:Set(集)、List(列表)和Map(映射),下面这篇文章主要给大家介绍了关于Java中集合List、Set和Map的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-01-01
  • springboot下添加日志模块和设置日志文件输出的方法

    springboot下添加日志模块和设置日志文件输出的方法

    日志的使用将通过SLF4J来使用,SLF4J是一个为Java应用提供简单日志记录的接口,在Spring框架中,SLF4J常常用于处理框架本身以及应用程序的日志记录,本文给大家介绍springboot下添加日志模块和设置日志文件输出的相关知识,感兴趣的朋友一起看看吧
    2023-12-12

最新评论