<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>HandlerMapping on 蓝尾蜂鸟</title><link>https://clibing.com/tags/handlermapping/</link><description>Recent content in HandlerMapping on 蓝尾蜂鸟</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>Copyright © 2011-2026 clibing. All Rights Reserved.</copyright><lastBuildDate>Thu, 16 Apr 2020 17:31:56 +0800</lastBuildDate><atom:link href="https://clibing.com/tags/handlermapping/index.xml" rel="self" type="application/rss+xml"/><item><title>HandlerMapping</title><link>https://clibing.com/posts/java/spring/handlermapping/</link><pubDate>Thu, 16 Apr 2020 17:31:56 +0800</pubDate><guid>https://clibing.com/posts/java/spring/handlermapping/</guid><description><![CDATA[<h1 id="spring-handlermapping" data-numberify>Spring HandlerMapping<a class="anchor ms-1" href="#spring-handlermapping"></a></h1>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-java" data-lang="java"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="kn">package</span><span class="w"> </span><span class="nn">org.springframework.web.servlet</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="kn">import</span><span class="w"> </span><span class="nn">javax.servlet.http.HttpServletRequest</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 4</span><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="ln"> 5</span><span class="cl"><span class="kn">import</span><span class="w"> </span><span class="nn">org.springframework.lang.Nullable</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 6</span><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="ln"> 7</span><span class="cl"><span class="kd">public</span><span class="w"> </span><span class="kd">interface</span> <span class="nc">HandlerMapping</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="w">    </span><span class="c1">// 省略一下常量配置.....</span><span class="w">
</span></span></span><span class="line"><span class="ln"> 9</span><span class="cl"><span class="w">	</span><span class="cm">/**
</span></span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="cm">	 * 返回此请求的处理程序和任何拦截器。可以根据请求URL、会话状态或实现类选择的任何因素做出选择。
</span></span></span><span class="line"><span class="ln">11</span><span class="cl"><span class="cm">     * 返回的HandlerExecutionChain包含一个处理程序对象，而不是标记接口，因此处理程序不受任何约束。
</span></span></span><span class="line"><span class="ln">12</span><span class="cl"><span class="cm">     * 例如，可以编写HandlerAdapter来允许使用其他框架的处理程序对象。
</span></span></span><span class="line"><span class="ln">13</span><span class="cl"><span class="cm">	 */</span><span class="w">
</span></span></span><span class="line"><span class="ln">14</span><span class="cl"><span class="w">	</span><span class="nd">@Nullable</span><span class="w">
</span></span></span><span class="line"><span class="ln">15</span><span class="cl"><span class="w">	</span><span class="n">HandlerExecutionChain</span><span class="w"> </span><span class="nf">getHandler</span><span class="p">(</span><span class="n">HttpServletRequest</span><span class="w"> </span><span class="n">request</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">Exception</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="ln">16</span><span class="cl"><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><p>根据Request查找Handler和 Interceptors 。获取Handler的过程是通过实现AbstractHandlerMapping的<code>getHandlerInternal</code>模板方法的子类处理。AbstractHandlerMapping中保存了所有配置（interceptors集合、HandlerInterceptor集合、排序、bean的名字等)，在获取到Handler后内部会从Request中提取lookupPath将对应的Interceptors装配。同时也暴露给子类设置自己的Interceptors。</p>]]></description></item></channel></rss>