springboot关于webmvc配置问题记录
在之前的文章(springboot配置静态资源访问路径)中说过,springboot默认的加载静态资源的地方是在resources目录下的static文件夹下,其实除了resources目录下得static文件夹可以被访问,在resources目录下创建resources文件夹、public文件夹、META-INF/resources文件夹都是可以被访问到的,只不过springboot默认推荐我们使用static文件夹,而且查找的优先级是META-INF/resources》public》resources》static。
当我们要修改springboot默认的静态资源加载路径的时候,我们可以直接在配置文件properties、yml中直接设置,或者找个配置类(使用@configuration注解的类)使其继承org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter或者org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport并重写addResourceHandlers(ResourceHandlerRegistry registry)方法,这个方法在WebMvcConfigurerAdapter和WebMvcConfigurationSupport中都是空实现。
在此,建议在springboot 1.x版本使用WebMvcConfigurerAdapter这个类,2.x版本实现WebMvcConfigurer 接口,不推荐使用WebMvcConfigurationSupport和@EnableWebMvc注解。因为springboot默认会给我们添加一个配置类WebMvcAutoConfiguration,但是这个配置类的加载是有条件的( @ConditionalOnMissingBean(WebMvcConfigurationSupport.class)),只有缺少WebMvcConfigurationSupport配置类才会生效,当我们使用继承WebMvcConfigurationSupport或者@EnableWebMvc注解(这个注解会导入DelegatingWebMvcConfiguration,这个类继承自WebMvcConfigurationSupport
)时,springboot的就不会帮我们加载WebMvcAutoConfiguration这个配置类了,这个时候就需要我们进行一些webmvc的配置。而且比较坑的是如果我们使用继承WebMvcConfigurationSupport这种方式,不能多次使用,也就是说如果我们有两个及以上配置类继承WebMvcConfigurationSupport时,只会有一个生效;当我们即使用@EnableWebMvc又有配置类继承WebMvcConfigurationSupport时,我们的配置类是会生效的。
@EnableWebMvc、WebMvcConfigurationSupport、WebMvcConfigurerAdapter这三个使用效果:
- 使用WebMvcConfigurerAdapter =====》全部生效
- 使用WebMvcConfigurationSupport(多个) ====》某一个生效,其他不生效
- 使用WebMvcConfigurerAdapter + WebMvcConfigurationSupport ====》WebMvcConfigurationSupport生效
- 使用@EnableWebMvc+ WebMvcConfigurationSupport ====》WebMvcConfigurationSupport生效
- 使用@EnableWebMvc+ WebMvcConfigurerAdapter ====》WebMvcConfigurerAdapter 不生效
最新文章
- Laravel [1045] 解决方法 Access denied for user 'homestead'@'localhost'
- CodeUI Test:创建第一个CodeUI Test
- CentOS 7 用户怎样安装 LNMP(Nginx+PHP+MySQL)
- sublime text 3 license 2016.05
- oracle 11g install linux
- C#微信公众平台开发—access_token的获取存储与更新
- SQL TUNNING
- c3p0配置详解
- 在CSS中,BOX的Padding属性的数值赋予顺序为
- 转载:as3.0下对象类型返回值与变量默认值的详细说明
- Microsoft Visual Studio Ultimate 2013 旗舰版 有效注册密钥
- 建站服务器的最优选择之Windows Or Linux
- JSON 和 JSONP
- apache pk nginx pk Lighttpd
- 关于K-Means算法
- 微服务化不同阶段 Kubernetes 的不同玩法
- 什么是BFC
- Aladdin and the Flying Carpet LightOJ - 1341 (素数打表 + 算术基本定理)
- 京东无人超市的成长之路 如何利用AI技术在零售业做产品创新?
- LeetCode 463. Island Perimeter岛屿的周长 (C++)