好的,我理解通过DispatcherServlet配置的任何Web应用程序上下文都继承了根WebApplicationContext中已定义的所有bean。不过我在我的根ApplicationContext
中配置了一些拦截器 <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="order" value="2"/>
<property name="interceptors">
<list>
<ref bean="statisticsInterceptor"/>
<ref bean="sessionDiagnosticsInterceptor"/>
...
然后在我的web.xml中我有这样的东西:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext*.xml
</param-value>
</context-param>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value></param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>dispatcher-api</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/appOtherContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>dispatcher-api</servlet-name>
<url-pattern>/example/apiOther/*</url-pattern>
</servlet-mapping>
所以问题是我每次去任何包含&#34; / example / apiOther / &#34;的网址时,都不会到达/运行拦截器。我的问题是:为什么? handlerMapping的范围是什么?我认为,因为它在根applicationContext中,它应该适用于所有子上下文。我一直在做一些研究,我认为HandlerMappings仅限于其上下文,即使它是根上下文。是吗?
答案 0 :(得分:0)
在通过DefaultAnnotationHandlerMapping
配置拦截器时,它们将仅用于同一ApplicationContext中的控制器。您可以(即使它不是很好)在根应用程序上下文中声明拦截器,前提是引用它们的DefaultAnnotationHandlerMapping
在servlet应用程序上下文中声明,您可以直接或通过注释声明控制器。