Spring容器的启动
主语 |
动作 |
宾语 |
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调用执行根应用上下文的初始化工作