Spring-web源代码阅读之WebApplicationContext

未分类

2021-01-28

397

0

Spring-web源代码阅读之WebApplicationContext

为什么要写WebApplicationContext?

在spring-web模块中,ContextLoader的主要任务就是初始化WebApplicationContext,可以说在WebApplicationContext中包含了在web应用中使用到的一切功能(Bean)和配置参数。由此可见,它在spring-web模块中的核心地位,因此今天就WebApplicationContext来做 一下总结,写下我的理解。

对Context的理解

在说WebApplicationContext之前,想先说一下Context这个东西,经常见到这个单词,词典中的意思是:背景,环境,来龙去脉;上下文;语境等等,在spring-web中我们也可以把它理解为“环境”,但是spring中还有另外一个接口Environment,翻译过来也是“环境”,二者难以区分,所以这里还是叫做上下文,上下文为我们的应用程序提供了一个执行的场所和许多便利的工具,比如ApplicationContext,它集成了spring的容器的强大功能,使得我们可以利用spring容器来管理应用程序的对象实例和相关配置参数,并且添加了与应用程序相关的通用方法,如获取应用程序名称、启动日期等,总之,上下文为我们应用程序提供了运行的公共场所,为我们提供了必要的和便利的公共设施,为程序之间相互共享和通信提供了便利条件。

对WebApplicationContext的理解

现在我们再来理解一下WebApplicationContext ,首先它也是Context,具备上述上下文的所有特征和功能,首先看下面的类结构图,可以知道WebApplicationContext是一个接口,继承了ApplicationContext接口,顾名思义,是在ApplicationContext中增加了Web的特性,具体体现在了getServletContext()方法上,通过这个方法可以获取到Java web的核心上下文,即ServletContext,因此将spring的ApplicationContext和ServletContext结合到了一起,形成了一个能够支持Web应用程序运行的上下文。

顺着继承结构再往上找,ApplicationContext继承了两个核心的BeanFactory,即ListableBeanFactory和HierarchicalBeanFactory,所以我们可以认为ApplicationContext也是一个BeanFactory,也就是说ApplicationContext也是一个Spring容器,所以它才能够为我们管理web应用程序的bean组件和参数配置。

因此,可以说ApplicationContext是spring框架为我们提供的应用层容器的抽象,可以用来实现任何想要集成spring容器功能的应用程序上下文,spring-web只是spring为我们实现了一个常用的Java Web类型的应用程序上下文。我们也可以照此,实现自己的应用程序上下文,为我们的应用程序服务。

Spring-web中的WebApplicationContext有哪些?

  • XmlWebApplicationContext (默认)
  • StaticWebApplicationContext (主要用于测试)
  • AnnotationConfigWebApplicationContext(使用注释来配置的上下文)
  • GenericWebApplicationContext(可编程启动的上下文,可嵌入到应用程序中)
  • GroovyWebApplicationContext(可加载使用Groovy定义的bean)

 

发表评论

全部评论:0条

Eric

莫等青春散场,才后悔来不及、回不去、得不到

热评文章

推荐文章