为什么DispatcherServlet创建另一个应用程序上下文?

谢继来:

我已经使用ContextLoaderListener和上下文init-parameter 配置了根应用程序上下文contextConfigLocation

然后,JSF(* .jsf)变量解析器访问根上下文。它工作正常。

现在的问题是,经过的请求(* .do)DispatcherServlet将获得另一个应用程序上下文,然后将单例bean实例化两次。

我不需要其他的应用程序上下文DispatcherServlet,如何指定它以重新使用由加载的现有根应用程序上下文ContextLoaderListener

注意

阅读答案中的参考页后,我知道根上下文和调度程序上下文之间存在上下文分隔,但是没有一个参考告诉我要去哪里。因此,这是我的解决方案,可能对面临类似问题的其他人有所帮助:

  1. 在调度程序servlet:的上下文配置XML中dispatcher-servlet.xml,我重复了<context:component-scan/>已在根上下文中定义的define定义。因此将其删除。dispatcher-servlet.xml只需要定义仅用于Spring MVC的那些豆子。

  2. 在根上下文中已经扫描并实例化了所有控制器,但是,默认情况下,Spring MVC不会在根上下文中注册用于请求映射的控制器。您可以:

    2.1。在根上下文中,@Controller从中排除<component-scan>,并且@Controller仅在dispatcher-servlet.xml中进行扫描

    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>
    
瑞安·斯图尔特(Ryan Stewart):

为了回答您的第一个问题,DispatcherServlet创建了一个上下文,因为这是它允许自己进行配置的方式,如果您在一个应用程序中有多个DispatcherServlet,则需要分别对其进行配置。因此,每个人都有其自己的上下文,并且每个上下文都与“根”上下文分开,在该“根”上下文中,所有真实的“工作” bean都应存在,以便可以在其他上下文之间共享。在过去的几周中,由于这个问题的混乱而产生了许多问题。通过检查答案,您可能会更好地了解事物的工作方式:

Spring XML文件配置层次结构帮助/说明

在父上下文和子上下文中声明Spring Bean

Spring-MVC:什么是“上下文”和“命名空间”?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Spring从另一个项目导入应用程序上下文

在另一个模块中使用应用程序上下文

如何从另一个Maven模块导入Spring应用程序上下文?

应用程序上下文DbSet <>如何从另一个类继承DbSet

为什么ZeroMQ建议为应用程序创建一个上下文?

为什么我的应用程序的一部分在一个上下文中工作而在另一个上下文中不工作?

春季:为什么“根”应用程序上下文和“ servlet”应用程序上下文是由不同的各方创建的?

应用程序上下文。这是什么?

spring oauth 2 授权服务器应用程序与另一个应用程序共享相同的安全上下文

无法初始化上下文,因为已经存在一个根应用程序上下文(仅使用注释)

如何使一个类了解Spring MVC中的多个应用程序上下文?

为什么我的常规应用程序上下文无法加载我的属性文件?

如何在我的应用程序上创建另一个屏幕

为什么烧瓶中的应用程序上下文不是应用程序的单例?

在域驱动设计中,可以调用另一个有界上下文的应用程序服务吗?

在MPA中反应上下文(针对不同应用程序的一个上下文)

为什么我们在Android的短信管理器中使用应用程序上下文

使用 gradle 并行运行 spring boot 测试创建两个应用程序上下文

如何为具有不同映射关系的一个servlet配置不同的Web应用程序上下文

XSLT-从另一个上下文创建节点

如何从子上下文检索对象到另一个上下文?

如何从另一个上下文获取 React 上下文?

获取应用程序上下文错误

更改Tomcat Web应用程序上下文

Dagger 无法注入应用程序上下文

在活动中调用应用程序上下文

RuntimeError:在应用程序上下文之外工作

在应用程序上下文之外工作-Flask

Android中的应用程序上下文