这是来自WebMvcConfigurerAdapter,官方的Spring文档。
已过时。 从5.0开始,WebMvcConfigurer具有默认方法(由Java 8基线实现)并且可以直接实现而无需此适配器
我查看了WebMvcConfigurer的源代码,但我找不到一个带有关键字'default'的方法。
WebMvcConfigurer究竟如何定义默认方法?
我必须承认我不明白
(由Java 8基线提供)
我尝试使用谷歌搜索但没有出现'Java 8基线'。 (某种新功能?)
目前,我的本地设置使用WebMvcConfigurer接口,所有方法都是自动生成的,它们在方法体中没有任何内容。
我大致遵循Spring REST指南,到目前为止一切似乎都在运行。
这是如何工作的?
修改
我怀疑WebMvcConfigurer。也就是说,它只添加或自定义配置。我使用@EnableWebMvc的配置类测试了我的本地设置,没有扩展或实现任何类或接口,并且在类体中没有任何配置。一切(非常简约的json响应)都能正常工作。
所以我的猜测是,如果我实现WebMvcConfigurer并将方法体留空是无关紧要的。
不过,我的好奇心是,为什么文件说WebMvcConfigurer有默认方法?
答案 0 :(得分:1)
在此配置类的上下文中,Spring 5与早期版本之间的区别是,早期的开发人员使用WebMvcConfigurerAdapter
这是abstract
类,它实现了WebMvcConfigurer
< / p>
如果我们仔细查看为什么这样做,一切都会变得清晰起来。
WebMvcConfigurerAdapter
类的第一行说:带有空方法的WebMvcConfigurer实现,允许子类仅覆盖其感兴趣的方法
因此,如果有人想自己写配置,他们必须给出method
中每个WebMvcConfigurer
的实现。
因此,Spring创建了一个abstract
类,以便开发人员可以选择他们想要使用的必需功能。
自从Java 8开始,interfaces
附带了default
实现,Spring开发人员找到了一种方法,可以通过在abstract
中提供默认实现来摆脱interface
类。本身而不是abstract
类。
因此,default
关键字被添加为WebMvcConfigurer
中每个方法的前缀
答案 1 :(得分:0)
在5.0.4版本中它们几乎就在那里:
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package org.springframework.web.servlet.config.annotation;
import java.util.List;
import org.springframework.format.FormatterRegistry;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.lang.Nullable;
import org.springframework.validation.MessageCodesResolver;
import org.springframework.validation.Validator;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.HandlerMethodReturnValueHandler;
import org.springframework.web.servlet.HandlerExceptionResolver;
public interface WebMvcConfigurer {
default void configurePathMatch(PathMatchConfigurer configurer) {
}
default void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
}
default void configureAsyncSupport(AsyncSupportConfigurer configurer) {
}
default void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
}
default void addFormatters(FormatterRegistry registry) {
}
default void addInterceptors(InterceptorRegistry registry) {
}
default void addResourceHandlers(ResourceHandlerRegistry registry) {
}
default void addCorsMappings(CorsRegistry registry) {
}
default void addViewControllers(ViewControllerRegistry registry) {
}
default void configureViewResolvers(ViewResolverRegistry registry) {
}
default void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
}
default void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> handlers) {
}
default void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
}
default void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
}
default void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
}
default void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
}
@Nullable
default Validator getValidator() {
return null;
}
@Nullable
default MessageCodesResolver getMessageCodesResolver() {
return null;
}
}