为什么使用Spring ApplicationContext层次结构?

Bab*_*nam 55 spring

我试图在春天理解ApplicationContext层次结构.

我学到了以下内容

  1. ApplicationContext不能包含多个父ApplicationContext.
  2. 当给定的ApplicationContext无法解析bean时,它会将解析请求传递给其父级.
  3. ApplicationContext的父级在其构造函数中指定.

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

我能从谷歌得到的最好的就是这个.而我的理解是,如果一个应用程序在各个层定义了大量的bean,那么每个层都有自己的ApplicationContext将是一个好处.不明白的是这样做的好处是什么?如何实现收益?

TIA,Vijay

ska*_*man 50

这个经典的用例就是当你DispatcherServlet在一个webapp中有多个Spring时,每个servlet都有自己的应用程序上下文,但需要在它们之间共享bean.在这种情况下,您将在webapp级别添加第3个上下文,该上下文是每个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中的context-param)中定义的Bean将加载到根应用程序上下文中.<servlet-name> -servlet.xml中的Bean被加载到servlet应用程序上下文中.如果EAR具有多个Web应用程序,则EAR级别应用程序上下文可以在EAR中为每个Web应用程序的根上下文提供父级. (10认同)