SpringBoot 2.x.x 版本 与 旧版本的区别
学习SpringBoot时,跟视频上的版本不一致,有几处地方不一样,特此记录
1、WebMvcConfigurerAdapter已过时
在新版本的SpringBoot中,WebMvcConfigurerAdapter这个抽象类已经过时。因为SpringBoot的 2.0 及其以上版本最低支持
Java 8,而Java 8 中有个新特性就是default关键字。
根据此特性,SpringBoot 2.0.0对WebMvcConfigurerAdapter的上层接口WebMvcConfigurer进行了改进,将WebMvcConfigurer中的方法全部改为default关键字修饰的方法,因此不需要再使用适配器进行适配。下面截取WebMvcConfigurer的部分代码:
public interface WebMvcConfigurer {
default void configurePathMatch(PathMatchConfigurer configurer) {
}
default void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
}
default void configureAsyncSupport(AsyncSupportConfigurer configurer) {
}
default void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
}
也就是说 WebMvcConfigurerAdapter 被 WebMvcConfigurer 接口替代了,可以直接继承 WebMvcConfigurer 接口然后实现他的default方法即可。
除了WebMvcConfigurer接口之外,WebMvcConfigurerAdapter 还可以用 WebMvcConfigurationSupport 替代,只不过使用WebMvcConfigurationSupport这个类来替换WebMvcConfigurerAdapter时会全面接管对SpringMVC的配置,即SpringBoot对SpringMVC的自动配置全部失效,均使用用户对SpringMVC的配置。
2、SpringMVC拦截器拦截静态资源
我们知道旧版本的 SpringBoot 配置的拦截器对静态资源是默认放行的,而SpringBoot 2.0.0及其以上版本的拦截器不会对静态资源默认放行,也会进行拦截。如果想要使用静态资源就必须排除静态资源的请求路径。
如一下代码:
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginHandlerIntercepter()).addPathPatterns("/**")
.excludePathPatterns("/asserts/**","/webjars/**");
}
我的静态资源放在 /asserts 和 /webjars 中,/**会统配所有的资源,这样拦截器就不会拦截我们们的静态资源。
目前还在学习,后续可能还有补充。