SpringMVC WebMvcConfigurerAdapter已过时的解决方法

Spring5.0之前,拦截器配置都是直接继承WebMvcConfigurerAdapter的,从5.0之后,这个类已废弃,源码中注释如下:

/**
* An implementation of {@link WebMvcConfigurer} with empty methods allowing
* subclasses to override only the methods they're interested in.
*
* @author Rossen Stoyanchev
* @since 3.1
* @deprecated as of 5.0 {@link WebMvcConfigurer} has default methods (made
* possible by a Java 8 baseline) and can be implemented directly without the
* need for this adapter
*/

大致意思是:拜Java 8所赐,WebMvcConfigurer有了defalut方法,允许子类仅覆盖那些需要的方法,所以这个适配器不需要了,直接实现WebMvcConfigurer接口就好了。

通过查看WebMvcConfigurer源码,发现方法都已经改成了defalut修饰,并且两个nullable方法也迁移过来了:

看到这两个Nullable方法就明白了,因为在老版本里,接口方法是不能有方法体的,所以才要有WebMvcConfigurerAdapter去包装一下,现在这个return null可以写到接口里了,所以就不用多余再写一个抽象类了。

故新的写法如下:

package net.educoder.ims.config; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.ViewResolverRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.view.InternalResourceViewResolver; @Configuration public class MyMvcConfig extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { //静态资源路径 /***************** Begin ****************/ /***************** End ****************/ super.addResourceHandlers(registry); } } 任务描述 本关任务:修改默认配置,使程序返回静态资源success.txt的内容。 相关知识 为了完成本关任务,你需要掌握:1.SpringBoot启动配置原理,2.修改SpringMVC默认配置。 SpringBoot自动配置原理 SpringBoot项目启动时,都会使用@SpringBootApplication注解,@SpringBootApplication是一个复合注解或派生注解。 @SpringBootApplication public class ImsApplication { public static void main(String[] args) { SpringApplication.run(ImsApplication.class, args); } } 在@SpringBootApplication中有一个注解@EnableAutoConfiguration,用于开启自动配置,其中使用@Import({AutoConfigurationImportSelector.class})导入这个类实现关键功能,在这个类中调用loadFactoryNames()扫描所有具有spring.factories文件,这个spring.factories文件也是一组一组的key=value的形式,其中一个key是EnableAutoConfiguration类的全类名,而它的value是一个xxxxAutoConfiguration的类名的列表,这些类名以逗号分隔,如下图所示: 再上图中,我们就引入了spring-boot-autoconfigure的jar包,在其中有spring.factories文件,上图中EnableAutoConfiguration配置了多个类,这些都是SpringBoot中的自动配置相关类;在启动过程中会解析对应类的配置信息。每个配置类都定义了相关bean的实例化配置,根据配置参数初始化相应组件。Spring会根据不同条件做出不同的反应,下面介绍几种条件注解: @ConditionalOnBean:当SpringIoc容器内存在指定Bean的条件 @ConditionalOnClass:当SpringIoc容器内存在指定Class的条件 @ConditionalOnExpression:基于SpEL表达式作为判断条件 @ConditionalOnJava:基于JVM版本作为判断条件 @ConditionalOnJndi:在JNDI存在时查找指定的位置 @ConditionalOnMissingBean:当SpringIoc容器内不存在指定Bean的条件 @ConditionalOnMissingClass:当SpringIoc容器内不存在指定Class的条件 @ConditionalOnNotWebApplication:当前项目不是Web项目的条件 @ConditionalOnProperty:指定的属性是否有指定的值 @ConditionalOnResource:类路径是否有指定的值 @ConditionalOnSingleCandidate:当指定Bean在SpringIoc容器内只有一个,或者虽然有多个但是指定首选的Bean @ConditionalOnWebApplication:当前项目是Web项目的条件 以上注解都是元注解@Conditional演变而来的,根据不用的条件对应创建以上的具体条件注解。 对于大多数配置类的细节,基本存在以下步骤: 1,@ConditionOnClass激活一个配置,当类路径中存在这个类时才会配置该类; 2,@EnableConfigurationProperties自动映射一个POJO到Spring Boot配置文件(默认是application.properties文件)的属性集; 3,@ConditionalOnMissingBean启用一个Bean定义,但必须是这个Bean之前未定义过才有效。 修改SpringMVC默认配置 SpringBoot提供了SpringMVC的自动配置帮助进行Web项目开发,主要提供了以下配置: 配置了视图解析器bean; 静态资源访问支持,包括WebJars; 注册了转换器和格式化器; 请求响应信息转换器; 注册信息校验解析器-定义错误代码生成规则; 静态页面index.html支持; 项目浏览器图标支持; 可配置web数据绑定初始化器bean的自动使用。 SpringBoot在自动配置很多组件的时候,先看容器中有没有用户自己配置的@Bean、@Component,如果有就用用户配置的,如果没有,才会自动配置。当我们添加@EnableWebMvc注解时,SpringBoot对SpringMVC的默认配置失效,而我们只需要对默认配置进行扩展,如下重写addResourceHandlers()实现静态资源配置: @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { //静态资源路径 css,js,img等 registry.addResourceHandler("/statics/**").addResourceLocations("classpath:/statics/"); //视图 registry.addResourceHandler("/templates/**").addResourceLocations("classpath:/templates/"); //mapper.xml registry.addResourceHandler("/mapper/**").addResourceLocations("classpath:/mapper/"); super.addResourceHandlers(registry); } 同理,还可以通过重写addInterceptors() 来配置拦截器,重写addCorsMappings方法实现配置cors跨域限制等,重写addViewControllers()方法配置view视图映射重写configureMessageConverts()方法来对消息进行转换,重写addFormatters()方法来添加数据格式化器,比如将字符串转换为日期类型,可通过DateFormatter类来实现自动转换,重写configureViewResolvers()方法来配置视图解析器,主要是配置视图的前后缀。 编程要求 根据提示,在右侧编辑器补充代码,修改默认配置,使程序返回静态资源success.txt的内容。 测试说明 平台会对你编写的代码进行测试,访问http://localhost:8080/success/success.txt, 如果输出success,则代表测试通过。 开始你的任务吧,祝你成功!
最新发布
12-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值