WebApplicationContext接口

/ Spring / 没有评论 / 305浏览

这一篇我们介绍一下WebApplicationContext接口的知识,看WebApplicationContext接口的名字我们应该可以得知,这个接口就是专门为Web应用准备的,它允许从Web根目录的路径中装载配置文件并完成初始化工作。我们可以从WebApplicationContext接口中获取到ServletContext的引用。我们可以通过WebApplicationContextUtils工具类获取到WebApplicationContext接口的实例。除此之外,在WebApplicationContext接口中还对对象新增了3个新的作用域,它们分别是:request、session、global session。而在非Web应用中对象只有2个作用域,也就是singleton和prototype。

WebApplicationContext的初始化和BeanFactory、ApplicationContext有所区别。因为WebApplicationContext是专门为Web应用设计的,所以WebApplicationContext需要ServletContext实例,也就是必须需要Web容器才可以完成初始化。在spring中我们可以使用ContextLoaderListener监听器启动WebApplicationContext。

下面我们看一下监听器的具体配置,下面配置是在web.xml中的配置的。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">

<!-- 指定配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:test.xml</param-value>
</context-param>

<!-- 指定所使用的监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

</web-app>

在spring中我们知道IOC容器是分为父子容器的。子容器可以访问父容器的对象,但父容器不能访问子容器的对象。在容器中对象的id必须是唯一的,但子容器可以拥有一个和父容器id相同的对象。这样做的好处是我们可以通过变成的方式,为一个已经存在的容器添加特殊的子容器,以为容器提供一些额个的功能。在spring中最典型的父子容器的应用就是springMVC。我们将在后续的文章中详细分析这一方面的知识。