博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Springboot中对mvc进行扩展
阅读量:3925 次
发布时间:2019-05-23

本文共 1474 字,大约阅读时间需要 4 分钟。

文章目录

声明:本篇文章所有的内容都是基于***springboot2.2.5***的。

关于springboot对mvc的自动配置见我的另一篇博客:

对于已经有的自动配置显然很多时候并不能满足我们的需求,那么我们如何实现对mvc的扩展呢?

观看其他博客结合看源码发现:

1)、在SpringBoot中会有非常多的xxxConfigurer帮助我们进行扩展配置
2)、SpringBoot在自动配置很多组件的时候,先看容器中有没有用户自己配置的(@Bean、@Component)如果有就用用户配置的,如果没有,才自动配置;如果有些组件可以有多个(如:ViewResolver),sprngboot就会将用户配置的和自己默认的组合起来;
3)、在SpringBoot中会有很多的xxxCustomizer帮助我们进行定制配置

实现WebMvcConfigurer接口

springboot官方对于mvc的扩展时,建议我们实现WebMvcConfigurer接口,并且要将该实现类加入到容器中。

在以前比如 springboot1.x.x 的时候,我们可以继承WebMvcConfigurerAdapter这个抽象类来完成对mvc的扩展,但是这个类值·全部是对WebMvcConfigurer的空实现,远吗如下:

在这里插入图片描述

对于在springboot 2.2.5版本已经废弃了这个类,idea中提示:

在这里插入图片描述
所以我们可以直接实现WebMvcConfigurer接口,反正WebMvcConfigurerAdapter也只是全部空实现。

并且WebMvcConfigurer接口中的方法全是default方法(java8之后支持在接口中定义default和static方法),所以我们可以只重写我们需要重写的方法:

在这里插入图片描述

我们可以复写这个接口中的default方法实现扩展,比如:

在这里插入图片描述
其中编写的我自己的登录拦截器如下所示:
在这里插入图片描述

将组件加入到容器中替代默认配置

比如国际化需要的组件LocaleResolver:

在这里插入图片描述
可以观察他的注解,只有容器中没有LocaleResolver这个组建的时候才帮我们自动配置,如果我们不想使用springboot的自动配置,我们可以写一个LocaleResolver并加入到容器中,这样默认的就会失效。

步骤一:编写一个自己的LocaleResolver

这个解析器的功能就是从get方式的请求中获取参数,在进行国际化,如下:
在这里插入图片描述
步骤二:将国际化解析器加入到容器中
在这里插入图片描述
这样就会自动替代springboot帮我们默认实现的。

加入容器中一起生效

对于可以有多个生效的组件,我们只要将我们DIY的加入到容器中即可,例如ViewResolver,查看WebMvcAutoConfiguger:

在这里插入图片描述
源码也是非常的体贴,还帮我们写了注释,ContentNegotiatingViewResolver会使用所有其他的视图解析器去定位一个视图,所以他应该有一个高的优先级,也就是会先加载他,他去帮我们调用其他的视图解析器。,之后debug的时候也可以看到。

第一步:编写我自己ViewResolver:

在这里插入图片描述
第二步:将自己编写的组件加入到容器中使之生效
在这里插入图片描述
第三步:debug查看我们的视图解析器是否生效
DispaterServlet是web的入口,所有的请求都要经过它,其中的核心方法就是doService方法,doService()方法调用的是doDispater()方法,在这里设置一个断点,查看是否生效:
在这里插入图片描述
在这里插入图片描述
可以观察到我们自己编写的ViewResolver已经加载进来了。

转载地址:http://mmqrn.baihongyu.com/

你可能感兴趣的文章
Blazor带我重玩前端(三)
查看>>
基于.NetCore3.1系列 —— 认证授权方案之授权揭秘 (下篇)
查看>>
实现业务数据的同步迁移 · 思路一
查看>>
龙芯开源社区上线.NET主页
查看>>
eShopOnContainers 知多少[11]:服务间通信之gRPC
查看>>
闲谈设计模式
查看>>
平台or职位,你怎么选?
查看>>
骚年快答 | 技术中台与业务中台都是啥?
查看>>
骚年快答 | 微服务架构中的BFF到底是啥?
查看>>
设计模式之适配器模式
查看>>
如何利用Gitlab-CI持续部署到远程机器?
查看>>
.NET Core + K8S + Loki 玩转日志聚合
查看>>
ASP.NET Core中的分布式缓存
查看>>
在ASP.NET Core中创建自定义端点可视化图
查看>>
五年了,别再把务虚会开 “虚” 了
查看>>
一文看懂"async"和“await”关键词是如何简化了C#中多线程的开发过程
查看>>
每天都在支付,你真的了解信息流和资金流?
查看>>
.Net Core 自定义配置源从配置中心读取配置
查看>>
设计模式之享元模式
查看>>
单例模式最佳实践
查看>>