当前位置: 首页 > 面试题库 >

关于Spring框架中的多个容器

燕靖
2023-03-14
问题内容

在典型的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 MVC项目中,有两个“容器”:一个由ContextLoaderListener创建,另一个由DispatchServlet创建。 我想知道,这真的是两个IoC容器实例吗?(我看到两个bean配置文件,一个是,另一个是) 如果有2个容器,那么有什么关系? 在一个容器中声明的bean可以在另一个容器中使用吗?

  • 问题内容: 我想知道人们对通过LINQ-to-SQL支持实体框架的决定有何想法?我有一个我最初使用LINQ-to- SQL开发的应用程序。我发现它是我们应用的理想解决方案。 在尝试移植到Entity Framework时,我感到很惊讶。恕我直言,甚至还没有准备好黄金时间。没有延迟加载,没有POCO,对继承的可怕依赖。我发现它在我的情况下基本上不可用,而是决定坚持使用LINQ- to-SQL,直到以

  • 在Doug Lea的论文“A Java Fork/Join Framework”中: http://gee.cs.oswego.edu/dl/papers/fj.pdf 在2.1偷工中,他说: 当工作线程遇到连接操作时,它会处理其他任务(如果可用),直到注意到目标任务已完成(通过isDone)。否则,所有任务都将在不阻塞的情况下运行到完成。 那么有人能具体告诉我这些“其他任务”来自哪里吗?它们来自

  • 这是我的spring.xml

  • 本文向大家介绍详解关于Spring Cloud 框架热部署的方法,包括了详解关于Spring Cloud 框架热部署的方法的使用技巧和注意事项,需要的朋友参考一下 摘要: 所谓热部署,就是在应用正在运行的时候升级软件,却不需要重新启动应用。对于Java应用程序来说,热部署就是在运行时更新Java类文件。 1、在对应的pom.xml 文件中添加依赖 2、注:project 中添加 spring-bo

  • 本文向大家介绍关于Java集合框架的总结,包括了关于Java集合框架的总结的使用技巧和注意事项,需要的朋友参考一下 本篇文章先从整体介绍了Java集合框架包含的接口和类,然后总结了集合框架中的一些基本知识和关键点,并结合实例进行简单分析。当我们把一个对象放入集合中后,系统会把所有集合元素都当成Object类的实例进行处理。从JDK1.5以后,这种状态得到了改进:可以使用泛型来限制集合里元素的类型,