在典型的Spring MVC项目中,有两个“容器”:一个由ContextLoaderListener创建,另一个由DispatchServlet创建。
我想知道,这真的是两个IoC容器实例吗?(我看到两个bean配置文件,一个是root-context.xml
,另一个是servlet-context.xml
)
如果有2个容器,那么有什么关系?
在一个容器中声明的bean可以在另一个容器中使用吗?
来自Spring官网:
接口org.springframework.context.applicationcontext
表示Spring IoC容器,并负责实例化、配置和组装上述bean。容器通过读取配置元数据来获取关于要实例化、配置和组装什么对象的指令。配置元数据以XML、Java注释或Java代码表示。
再次来自官方医生:
现在来回答你的问题,正如这里所说的:
在Spring Web应用程序中,有两种类型的容器,每种容器的配置和初始化都不同。一个是“应用程序上下文”,另一个是“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。最佳实践是在中间层服务(如业务逻辑组件和数据访问类)与Web相关组件(如控制器和视图解析器)之间保持明确的分离,这些服务通常定义在ApplicationContext中,每个Dispatcher Servlet中。
检查这些链接
Spring框架中ApplicationContext.xml和Spring-Servlet.xml的区别
http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/beans.html#beans-basics
问题内容: 在典型的Spring MVC项目中,有两个“容器”:一个由ContextLoaderListener创建,另一个由DispatchServlet创建。 我想知道,这真的是两个IoC容器实例吗?(我看到了两个bean配置文件,一个是另一个) 如果有2个容器,那是什么关系? 在一个容器中声明的豆类可以在另一个容器中使用吗? 问题答案: 从spring官方网站: 该接口 代表Spring I
问题内容: 我想知道人们对通过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以后,这种状态得到了改进:可以使用泛型来限制集合里元素的类型,