有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

无法从子WebApplicationContext访问根ApplicationContext中配置的java Spring拦截器

好的,我知道通过DispatcherServlet配置的任何web应用程序上下文都会继承根WebApplicationContext中已经定义的所有bean。尽管如此,我还是在根应用程序上下文中配置了一些拦截器

     <bean   class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
                <property name="order" value="2"/>
                <property name="interceptors">
                    <list>
                        <ref bean="statisticsInterceptor"/>
                        <ref bean="sessionDiagnosticsInterceptor"/>
...

然后在我的网上。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>

所以我遇到的问题是,每次我访问任何包含“/example/apiOther/”的URL时,都无法访问/运行拦截器。我的问题是:为什么handlerMapping的范围是什么?我认为,因为它位于根applicationContext中,所以应该应用于所有子上下文。我一直在做一些研究,我认为HandlerMapping仅限于其上下文,即使它是根上下文。是这样吗


共 (1) 个答案

  1. # 1 楼答案

    当您通过DefaultAnnotationHandlerMapping配置拦截器时,它们将仅用于同一ApplicationContext中的控制器。您可以(即使不是很好)在根应用程序上下文中声明拦截器,前提是引用它们的DefaultAnnotationHandlerMapping在servlet应用程序上下文中声明,您可以直接或通过注释声明控制器