【问题标题】:Why use Spring ApplicationContext hierarchies?为什么使用 Spring ApplicationContext 层次结构?
【发布时间】:2011-07-05 04:38:08
【问题描述】:

我正在尝试了解 Spring 中的 ApplicationContext 层次结构。

我学到了以下内容

  1. ApplicationContext 不能有 超过 1 位家长 应用程序上下文。
  2. 当给定的 ApplicationContext 无法解析 bean,它将通过决议 向其父级请求。
  3. 的父级 指定了 ApplicationContext 在其构造函数中。

我想了解何时使用 ApplicationContext 层次结构(而不​​是单个 ApplicationContext)。

我能从谷歌得到的最好的结果是this。而且 我的理解是,如果一个应用程序在各个层定义了大量的 bean,那么每个层都有自己的 ApplicationContext 将是一个好处。不明白的是这样做有什么好处以及如何获得好处?

【问题讨论】:

  • 嗨!似乎您提供的链接没有指向有关弹簧上下文的文章:)
  • 感谢您指出@aggredi。我已经点击了对链接的引用。

标签: spring


【解决方案1】:

典型的用例是当您在单个 web 应用程序中有多个 Spring DispatcherServlet 时,每个 servlet 都有自己的应用程序上下文,但需要在它们之间共享 bean。在这种情况下,您在 webapp 级别添加第三个上下文,它是每个 servlet appcontexts 的父级。

您可以进一步采用这种模式,例如,如果您将多个 web 应用程序捆绑到一个 JavaEE EAR 中。在这里,EAR 可以有自己的上下文,它是各个 webapp 上下文的父级,它是 servlet 上下文的父级,等等。你有这种责任等级。

在其他情况下,上下文结构由其他因素决定。例如,Spring Security 独立于 Spring MVC,并且要求其配置 bean 进入 webapp 上下文。如果你想使用 Spring MVC,那么它的配置必须进入 servlet 上下文,它以根 webapp 上下文作为其父级。

【讨论】:

  • 在进一步阅读中,理解以下内容(skaffman 已经指出了其中的一部分)。每个 Spring MVC webapp 都有一个根应用程序上下文和一个用于每个 DispatcherServlet 的 servlet 应用程序上下文。根应用程序上下文是每个 servlet 应用程序上下文的父级。在“contextConfigLocation”(web.xml 中的上下文参数)中定义的 Bean 被加载到根应用程序上下文中。 -servlet.xml 中的 Bean 被加载到 servlet 应用程序上下文中。如果一个 EAR 有多个 Web 应用程序,一个 EAR 级应用程序上下文可以作为 EAR 中每个 Web 应用程序的根上下文的父级。
猜你喜欢
  • 2016-09-06
  • 1970-01-01
  • 1970-01-01
  • 2012-12-28
  • 2019-06-08
  • 1970-01-01
  • 1970-01-01
  • 2014-11-21
  • 1970-01-01
相关资源
最近更新 更多