:本文Springboot版本为2.5.2;JDK版本是JDK 11。
写这篇文章的原因是我昨天问了一个问题。我问我一个问题。
问题大致如下:
为什么您知道浏览器向后端启动请求时正在寻找哪个接口?使用了哪种匹配规则?
Springboot Back -end Store API接口信息如何存储哪些数据结构?
老实说,在听他的话后,我觉得我还不够。我无法回答。
有点先决条件吗?
在Java系统中,可以继承该类并可以实现界面。但是注释没有这些概念,但是有一个派生的概念。例如,注释A.IT在注释B头上标记为标记,然后我们是我们的。可以说注释B是注释A的推导。
喜欢:
就像注释中有一个一样,我们也本质上使用注释。
@controller和@restController是相同的。
没有太多胡说八道,直接肝脏。
如果您不走前面,我们直接去这个入口。
我制作了一个常规分析流程图供您参考,这也是我个人查询的途径。
仅当扫描被@RestController或@requestmapping注释修改时,该方法输入该方法。目前,这是我们正在寻找的。我们不是其他豆类的讨论,也不是讨论。
让我们看一下处理逻辑,它的作用。
ISHANDLER方法确定它是否是Web资源类。当类标记@controller或 @requestMmapping.note时,@RestController是 @controller.sontrol.softer.controler.so @control.so @controller或@requestMmpapping。
此外< T > ,在requestMappingHandLermapping中实现
继续下降:
这个方法做什么?
其方法注释:在指定的处理程序BEAN中找到处理程序方法。
实际上,方法是真正启动方法的逻辑。通过在方法上解析或其他衍生物的注释。
定义在requestMappingHandLermapping类中
这仅仅是类层次requestMapping和方法-Level requestMapping()的组合
createeequestmappinginfo:
根据对相关元数据的搜索,选择给定的目标类型方法。
里面有许多杂项,很难清楚地表明它,只是让我们在这里谈论它。
DOC对该方法的评论:
根据对相关元数据的搜索,选择给定的目标类型方法。呼叫者使用MethodIntrospector.metadatalookup参数来定义感兴趣的方法,从而允许在结果映射中收集相关的元数据
乍一看,我没有清楚地告诉我,并张贴了一次调试的图片以查看它。
该代码的本质是将在此处解析并注册的信息
这是一个内部类。
:doc注意:一个注册表,该注册表维护处理方法的所有映射,公开执行搜索方法并提供并发访问。
这里没有关于其结构的讨论。如果您有兴趣,可以单击并继续查看。
我们继续探索我们的工作
这里的定义如下:
不同的方法来到这里,实际上,差异不是很大
实际上,在观看了此启动过程之后,对于我们刚刚开始的三个问题,我们很可能会发现其中两个。
您的Springboot Back -End Framework如何存储有关API接口的信息?存储了哪些数据结构?
第一个答案:与此注册表类大致相关。
第二个答案:当我们以前看到存储信息时,它们都与类有关,因此我们可以知道其底层的数据结构是
:本文Springboot版本为2.5.2;JDK版本是JDK 11。
它没有与多个版本进行比较,但据推测大多数版本都是如此。
然后,我们的下一步是查看在查看Springboot请求时如何找到相应的接口。我们的重点是我们的重点。
如果您不看其他人,那么让我们直接从这个地方开始。
我们只查看我们关注的内容,而不是我们注意什么,我们不会进行更多的讨论。
我还在这里绘制流程图以供您参考:
我们都熟悉SpringMVC处理请求的模式,因此我不会讨论。直接肝.0
1)doservice2)dodispatch3)gethandler返回此请求的handlerexecutionchain。
:由Handlermapping.Support分类,默认处理程序,处理程序拦截器,包括由路径模式映射的处理程序拦截器,包括处理程序拦截器。
该方法已定义,但这是一种抽象方法。我们看不起它,知道它做了什么。
让我们看一下他的实施:
4.4.1,gethandlerinternal4.4.44.2,LookupHandLermethod(匹配接口代码)需要注意匹配方法,匹配方法是根据内部的值路径匹配的。然后获取集合的第一个元素。如果您有兴趣,则可以查看此分类的规则。从理论上讲,首选路径的准确性越准确。特定代码实现如下:
在第二句话中,这是一个
方法和方法,真实的呼叫如下:
HXDM,看到这个。有熟悉感吗?我们开始时是存储信息的类和数据结构。XD。
然后这个结果非常清楚。
我们获得的列表是启动时扫描的所有接口,然后进行排序,进行第一个接口,并找到最匹配的接口。
XDM,我们完成了。
4.4.3。AddMatchingMappings仍然不容易清楚。让我们直接转到方法调用,看看它已经改变了什么。
简而言之,它是将信息存储到匹配变量中。还有一个与HandlerMethod匹配的实例。
我基本上可以回答结束前提到的三个问题。
他问的是,为什么当浏览器向后端启动请求时,他知道要查找哪个API接口,以及您的Springboot Back -end -end Framework如何存储有关API接口的信息?存储了哪些数据结构?
第一个答案:将所有接口信息保存到hashmap中。当要求时,取出关联的界面。排序后,它匹配最佳界面。
第二个答案:与此注册表类大致相关。
第三个答案:当我们之前看到存储信息时,底层被用于存储它,因此我们可以知道其底层的数据结构是
此外,只能说在这里提供个人意见。对于不足的写作技巧和缺乏知识,我们不能写非常终止的文章。
如果您认为这篇文章使您获得一些收益,我希望喜欢它并鼓励。
我也希望每个人都能积极交流。如果有任何劣势,请及时批准,并郑重地感谢您。
作者:宁Zaichun