Java SpringBoot 统一功能处理
-
掌握拦截器的使用, 及其原理
-
学习统一数据返回格式和统一异常处理的操作
-
了解一些Spring的源码
-
公司升级JDK要做的任务:
升级字段要进行的任务:
-
Linux部署
(1) 打jar包
(2) 使用java -jar 直接运行
在pom.xml中配置这个jar包(spring-boot-maven-plugin)
统一功能
拦截器
- 拦截器是Spring框架提供的核心功能之一, 主要用来拦截用户的请求, 在指定方法前后, 根据业务需要执行预先设定的代码.

预先设定的代码就是拦截器,你自己写的代码就是目标方法
举个例子:
拦截器的实现
拦截器的实现分为两步:
- 定义一个拦截器
- 把拦截器注册到项目中
(1) 定义一个拦截器:
(视图渲染我们不使用,一般是前端的工作)
这些函数内部可以自己实现我们的代码逻辑:
(2) 实现一个拦截器(给登录的逻辑添加一个拦截器)
某些路径不进行拦截:
3. 正常调用的流程:
使用拦截器进行调用的流程:
4. 前端的图片和代码也需要访问,不能够拦截,后端的登录和注册也不能拦截
5. 为什么登录功能,不进行拦截(注册也是一样的逻辑,如果注册都拦截了,新用户怎么注册)??
(1) 登录功能是用户获取身份凭证的入口,如果连登录都被拦截,系统就无法进行身份认证。
(2) 避免循环拦截
// 如果拦截器拦截登录请求
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
// 检查是否登录
if (!isLogin(request)) {
// 未登录,重定向到登录页面
response.sendRedirect("/login");
return false; // 拦截
}
return true;
}
问题:用户访问登录页面 → 拦截器检查 → 未登录 → 重定向到登录页面 → 再次触发拦截器 → 无限循环!
6. 使用 /** 和 /*
DispatcherServlet源码阅读
-
源码跟踪技巧:
在阅读框架源码的时候, 一定要抓住关键点, 找到核心流程.切忌从头到尾一行一行代码去看, 一个方法的去研究, 一定要找到关键流程, 抓住关键点, 先在宏观上对整个流程或者整个原理有一个认识, 有精力再去研究其中的细节. -
servlet 生命周期
(1) init
(2) service
(3) destroy
-
用于初始化处理器映射器HandlerMappings,初始化处理器适配器HandlerAdapter,初始化异常处理器解析器HandlerExceptionResolver

总结
- 对上面内容的总结


- 源码阅读
过滤器是servlet提供的,暂且不用看
Spring源码都是以了解(通过源码,了解Spring的流程)为主(应付面试)
适配器模式
HandlerAdapter 在 Spring MVC 中使用了适配器模式
- 适配器模式, 也叫包装器模式. 将一个类的接口,转换成用户期望的另一个接口, 适配器让原本接口不兼容的类可以合作无间.
简单来说就是目标类不能直接使用, 通过一个新类进行包装一下, 适配调用方使用. 把两个不兼容的接口通过一定的方式使之兼容.

可以通过适配器的方式, 使之兼容
2. 适配器模式的实现:
场景: 前面学习的slf4j 就使用了适配器模式, slf4j提供了一系列打印日志的api, 底层调用的是log4j 或者logback来打日志, 我们作为调用者, 只需要调用slf4j的api就行了。
那么Log4j 和 Slf4jApi 之间是没有关系的,但是通过了 Slf4jLog4JAdapter适配器联系了两者
/**
* slf4j接⼝
*/
interface Slf4jApi{
void log(String message);
}
/**
* log4j 接⼝
*/
class Log4j{
void log4jLog(String message){
System.out.println("Log4j打印:"+message);
}
}
/**
* slf4j和log4j适配器
*/
class Slf4jLog4JAdapter implements Slf4jApi{
private Log4j log4j;
public Slf4jLog4JAdapter(Log4j log4j) {
this.log4j = log4j;
}
@Override
public void log(String message) {
log4j.log4jLog(message);
}
}
/**
* 客⼾端调⽤
*/
public class Slf4jDemo {
public static void main(String[] args) {
Slf4jApi slf4jApi = new Slf4jLog4JAdapter(new Log4j());
slf4jApi.log("使⽤slf4j打印⽇志");
}
}
可以看出, 我们不需要改变log4j的api,只需要通过适配器转换下, 就可以更换日志框架, 保障系统的平稳运行。
适配器模式可以看作⼀种"补偿模式",用来补救设计上的缺陷。
统一数据格式返回

问题1:请求返回类型为Result时,不需要再进行处理了
问题2:返回结果为String时,不能正确进行处理




统一异常返回
- 源码看5.3.30.jar 版本的

2. 统一异常处理:
Spring容器在启动的时候,会进行初始化的工作,有一个是异常模块的处理,如果定义完之后,有多个异常适配的时候,ExceptionalHandler会对异常进行排序,选择最小的/最浅的进行异常处理
总结
- 对上面内容的总结:
(1) 拦截器:作用维度是URL
(2) 统一数据返回格式
(3) 统一异常处理
使用的三个注解:
更多推荐



所有评论(0)