【发布时间】:2011-12-11 15:17:00
【问题描述】:
我已经使用ContextLoaderListener 和上下文初始化参数contextConfigLocation 配置了根应用程序上下文。
然后由 JSF (*.jsf) 变量解析器访问根上下文。它工作正常。
现在的问题是,通过 DispatcherServlet 的请求 (*.do) 将获得另一个应用程序上下文,然后单例 bean 被实例化两次。
我不需要DispatcherServlet 的另一个应用程序上下文,如何指定它以重用由ContextLoaderListener 加载的现有根应用程序上下文?
注意
阅读答案中的参考页面后,我知道根上下文和调度程序上下文之间存在上下文分离,但没有任何参考告诉我该去哪里。所以这是我的解决方案,可能对面临类似问题的其他人有所帮助:
在调度程序 servlet 的上下文配置 XML 中:
dispatcher-servlet.xml,我复制了已在根上下文中定义的<context:component-scan/>。所以删除它。dispatcher-servlet.xml只需要定义那些仅用于 Spring MVC 的 bean。-
所有的控制器都已经在根上下文中被扫描和实例化,但是,Spring MVC 默认情况下不会在根上下文中注册控制器以进行请求映射。您可以:
2.1。在根上下文中,从
<component-scan>中排除@Controller,并仅在dispatcher-servlet.xml 中扫描@Controller。2.2。或者,将属性
DefaultAnnotationHandlerMapping.detectHandlersInAncestorContexts设置为 true:(dispatcher-servlet.xml:) <bean id="handlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> <property name="detectHandlersInAncestorContexts" value="true" /> </bean>
【问题讨论】:
-
嗨,谢 以下链接可能对您有用。 [stackoverflow.com/questions/7774295/…[1]:stackoverflow.com/questions/7774295/…
标签: java spring spring-mvc