写了一套优雅接口之后,领导让我给大家讲讲这背后的技术原理(上)

简介: Hello,各位小伙伴们,宣布一个好消息:咱们的公号终于有留言功能了!!!以后小伙们就可以在留言区留言跟阿粉一起交流咯~

上周文章年轻人不讲武德,竟然重构出这么优雅后台 API 接口我们使用  @ControllerAdviceResponseBodyAdvice 重构后端的 API 接口,降低了复杂度,减少了重复代码,后续接口开发非常简洁优雅。

知其然而知其所以然,今天这篇文章来聊聊这个注解背后的原理,让我们彻底掌握这个注解,避免后续踩坑。

另外,有个小伙伴看完上篇文章,觉得这个注解的跟 Spring Interceptor 功能很类似,再加上之前还学习了 Servlet 体系 Filter 功能,不知道这几个有什么区别,感觉很混乱。

所以今天这篇文章下面两个部分出发,详细解释一下。

  1. @ControllerAdviceResponseBodyAdvice  注解原理
  2. FilterInterceptorResponseBodyAdvice 区别

从源码解析背后的原理

上篇文章中我们看到 ResponseBodyAdvice的子类使用  @ControllerAdvice注解,大家有没有好奇,如果我将@ControllerAdvice换成 @Controller 注解,还能达到上篇文章的效果吗?

感兴趣的小伙伴可以自己尝试下,这里阿粉自己告诉大家结果了,实际测试结果是不行的。

那为什么一定要与@ControllerAdvice 搭配才会生效?

首先我们先查看一下 @ControllerAdvice 的源码:

20.jpg

image-20201128152447563

可以看到这个注解上还存在一个我们非常熟悉的 @Component 注解。这里我们可以将 @ControllerAdvice  理解成@Component 子类,所以其修饰的类也会成为 Spring 中 Bean

ps:大家可以看下 @Controller/@Service/@Repository,其实也是这个原理。

Spring 容器初始化过程,如果扫描到 @ControllerAdvice 注解,将会将其生成一个 ControllerAdviceBean Bean。

这个过程代码主要位于 RequestMappingHandlerAdapter#initControllerAdviceCache:

21.jpg

这段代码主要分为两步:

第一步使用 ControllerAdviceBean#findAnnotatedBeans获取所有被 @ControllerAdvice修饰的类。

22.jpg

第二步将所有实现了ResponseBodyAdvice 接口的 Bean 放入到 requestResponseBodyAdviceBeans 集合中,后续将会使用该集合。

24.jpg


相关文章
|
存储 安全 编译器
[笔记]读书笔记 C++设计新思维《一》基于策略的类设计(下)
[笔记]读书笔记 C++设计新思维《一》基于策略的类设计(下)
|
6月前
|
程序员 Python
类的设计奥秘:从代码到架构的科普全解
类的设计奥秘:从代码到架构的科普全解
93 2
2020考研公共课_基础精讲课_管理类联考综合能力 联考逻辑(读书笔记)
2020考研公共课_基础精讲课_管理类联考综合能力 联考逻辑(读书笔记)
|
安全 Java C++
[笔记]读书笔记 C++设计新思维《一》基于策略的类设计(上)
[笔记]读书笔记 C++设计新思维《一》基于策略的类设计
|
编解码 iOS开发
一节微课诞生的全过程(无保留分享,望收藏)
本来是想以直播的方式把制作这节微课的过程分享出来,但考虑到大家的时间不统一,制作过程太长,这节微课录音之后制作动画就足足用了两天
195 0
|
架构师
《架构师修炼之道》第八章--建立模型,化繁为简
项目进入了开发阶段,我们发现团队成员描述同一架构元素时使用的词汇各不相同。我们的设计决策表面上取得了一致意见,但大家实际各有各的理解。
349 0
《架构师修炼之道》第八章--建立模型,化繁为简
|
架构师 算法 搜索推荐
直击架构本质:优秀架构师必须掌握的几种架构思维
直击架构本质:优秀架构师必须掌握的几种架构思维
258 0
直击架构本质:优秀架构师必须掌握的几种架构思维
|
安全 云栖大会
「技术人生」第6篇:技术同学应该如何理解业务?
本文以大量理论论述解析业务,并提供多种基于不同场景的实操方法,帮助技术同学以科学、合理的方式开展日常工作、指导团队开展业务建设,保障顶层设计的落地执行。
1110 3
「技术人生」第6篇:技术同学应该如何理解业务?
|
前端开发 Dubbo Java
写了一套优雅接口之后,领导让我给大家讲讲这背后的技术原理(下)
Hello,各位小伙伴们,宣布一个好消息: 咱们的公号终于有留言功能了!!! 以后小伙们就可以在留言区留言跟阿粉一起交流咯~
写了一套优雅接口之后,领导让我给大家讲讲这背后的技术原理(下)
|
边缘计算 安全 CDN
开发手机直播源码难点多,从技术层面入手是关键
开发手机直播源码难点多,从技术层面入手解决是关键
开发手机直播源码难点多,从技术层面入手是关键