【SpringBoot】SpringBoot 2.x.x 版本 与 旧版本的区别

SpringBoot 2.x.x 版本 与 旧版本的区别

学习SpringBoot时,跟视频上的版本不一致,有几处地方不一样,特此记录

1、WebMvcConfigurerAdapter已过时

在新版本的SpringBoot中,WebMvcConfigurerAdapter这个抽象类已经过时。因为SpringBoot的 2.0 及其以上版本最低支持
Java 8,而Java 8 中有个新特性就是default关键字

default方法是在java8中引入的关键字,也可称为Virtual extension methods——虚拟扩展方法。是指,在接口内部包含了一些默认的方法实现(也就是接口中可以包含方法体,这打破了Java之前版本对接口的语法限制),从而使得接口在进行扩展的时候,不会破坏与接口相关的实现类代码。


根据此特性,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 中,/**会统配所有的资源,这样拦截器就不会拦截我们们的静态资源。

目前还在学习,后续可能还有补充。

你可能感兴趣的:(Java)