关于Spring框架中的多个容器

在典型的Spring MVC项目中,有两个“容器”:一个由ContextLoaderListener创建,另一个由DispatchServlet创建。

我想知道,这真的是两个IoC容器实例吗?(我看到了两个bean配置文件,一个是root-context.xml另一个servlet-context.xml

如果有2个容器,那是什么关系?

在一个容器中声明的豆类可以在另一个容器中使用吗?

回答:

从spring官方网站:

该接口org.springframework.context.ApplicationContext 代表Spring IoC容器,并负责实例化,配置和组装上述bean。容器通过读取配置元数据来获取有关要实例化,配置和组装哪些对象的指令。配置元数据以XML,Java批注或Java代码表示。

再次来自官方文档:

在Web MVC框架中,每个DispatcherServlet都有自己的WebApplicationContext,它继承了在根WebApplicationContext中已经定义的所有bean。这些继承的bean可以在servlet特定的作用域中被覆盖,并且你可以在给定Servlet实例本地定义新的特定于作用域的bean。

现在来到你的问题,因为据称在这里:

在Spring Web Applications中,有两种类型的容器,每种容器的配置和初始化方式都不同。一个是“应用程序上下文”,另一个是“ Web应用程序上下文”。首先让我们谈谈“应用程序上下文”。应用程序上下文是由web.xml中定义的ContextLoaderListener或ContextLoaderServlet初始化的容器,其配置如下所示:

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:*-context.xml</param-value>

</context-param>

在上述配置中,我要求spring从类路径中加载与* -context.xml匹配的所有文件,并从中创建应用程序上下文。例如,此上下文可能包含组件,例如中间层事务服务,数据访问对象或你可能希望在整个应用程序中使用(和重用)的其他对象。每个应用程序将有一个应用程序上下文。

另一个上下文是“ WebApplicationContext”,它是应用程序上下文的子上下文。Spring Web应用程序中定义的每个DispatcherServlet将具有关联的WebApplicationContext。WebApplicationContext的初始化是这样的:

<servlet>

<servlet-name>platform-services</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:platform-services-servlet.xml</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

你提供spring配置文件的名称作为servlet初始化参数。这里要记住的重要一点是XML的名称必须采用-servlet的形式。xml。在此示例中,该servlet的名称为platform-services,因此我们XML的名称必须为platform-service-servlet.xml。可以从每个WebApplicationContext引用ApplicationContext中可用的任何bean。最好的做法是,在业务逻辑组件和数据访问类(通常在ApplicationContext中定义)等中间层服务与控制器和视图解析器(在Web应用程序中定义)等与Web相关的组件之间保持清晰的区分。每个Dispatcher Servlet的WebApplicationContext)。

以上是 关于Spring框架中的多个容器 的全部内容, 来源链接: utcz.com/qa/435347.html

回到顶部