文章目录
一、Spring 容器
1、Spring 容器列述
序号 | 容器 | 描述 |
---|---|---|
1 | Spring BeanFactory 容器 | 它是最简单的容器,给 DI 提供了基本的支持,它用 org.springframework.beans.factory.BeanFactory 接口来定义。BeanFactory 或者相关的接口,如 BeanFactoryAware,InitializingBean,DisposableBean,在 Spring 中仍然存在具有大量的与 Spring 整合的第三方框架的反向兼容性的目的。 |
2 | Spring ApplicationContext 容器 | 该容器添加了更多的企业特定的功能,例如从一个属性文件中解析文本信息的能力,发布应用程序事件给感兴趣的事件监听器的能力。该容器是由 org.springframework.context.ApplicationContext 接口定义。 |
2、Spring 容器继承关系
-
ApplicationContext 主要的实现类是 ClassPathXmlApplicationContext
和FileSystemXmlApplicationContext;- ClassPathXmlApplicationContext:默认是从类路径加载配置文件;
- FileSystemXmlApplicationContext:默认从文件系统中加载配置文件。
其中常使用的容器ClassPathXmlApplicationContext类继承关系:
- WebApplicationContext 接口继承自ApplicationContext, 是专门为 WEB 应用准备的,它允许从web应用的根目录的路径中加载配置文件完成初始化工作。和 ApplicationContext初始化方式不同,WebApplicationContext 初始化需要 ServletContext 实例,即必须在拥有 WEB容器的前提下才能完成初始化工作。
二、ApplicationContext 、ServletContext和DispatcherServlet
1、ServletContext
ServletContext,即Servlet环境对象或Servlet容器,包含从容器环境中获得的初始化信息,其内提供的属性和方法在同一web应用下的所有servelt中被使用。每一个web-app只能有一个ServeltContext,web-app可以是一个放置web application文件的文件夹,也可以是一个.war。
2、ApplicationContext
ApplicationContext 是Spring的核心Context(上下文或容器),是Spring应用中管理Bean的存在。
Web应用中web.xml文件内容的定义示例:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
其中ContextLoaderListener、ContextLoaderServlet是Spring提供的监听启动Spring上下文的存在。
<load-on-startup>1</load-on-startup>
该标签标记容器是否应该在web应用程序启动的时候就加载这个servlet。正数表示启动时就加载。
3、DispatcherServlet
DispatcherServlet是对Servlet接口的一个实现,是一个标准的前端控制器,用以转发、匹配、处理每个servlet请求。
Spring Web 模型-视图-控制(MVC)框架是围绕 DispatcherServlet 设计的,DispatcherServlet 用来处理所有的 HTTP 请求和响应。Spring Web MVC DispatcherServlet 的请求处理的工作流程如下图所示: