主语 | 动作 | 宾语 |
Web容器 | 提供 | 一个全局的上下文环境ServletContext |
ServletContext | 提供 | 其为后面的spring IoC容器提供宿主环境 |
web.xml | 提供 | contextLoaderListener(监听器) |
contextLoaderListener | 监听 | 容器初始化事件 |
contextInitialized方法 | 被调用 | spring会初始化一个启动上下文WebApplicationContext |
WebApplicationContext | 是 | spring的IoC容器,会被以key-value形式存在ServletContext |
<context-param> | 配置 | Bean |
<servlet> | DispatcherServlet | |
DispatcherServlet上下文 | 初始化的时候 | 会建立自己的IoC上下文,用以持有spring mvc相关的bean |
在建立DispatcherServlet自己的IoC上下文时,会从ServletContext中获取WebApplicationContext作为自己上下文的parent上下文 | ||
有了这个parent上下文之后,再初始化自己持有的上下文,然后存到ServletContext |
javaee标准规定了,servlet容器需要在应用项目启动时,给应用项目初始化一个ServletContext作为公共环境容器存放公共信息。ServletContext中的信息都是由容器提供的
web.xml中可以定义两种参数:
一个是全局参数(ServletContext),通过<context-param></context-param>
一个是servlet参数,通过在servlet中声明
<init-param>
<param-name>param1</param-name>
<param-value>avalible in servlet init()</param-value>
</init-param>
spring为我们提供了实现ServletContextListener接口的上下文初始化监听器:org.springframework.web.context.ContextLoaderListener
ContextLoader的描述文档中已经说的很明白了其作用:实际上由ContextLoaderListener调用执行根应用上下文的初始化工作