IoC容器初始化之——WebApplicationContext

此文章为自己看《Spring4.x企业应用开发实战》一书,总结的笔记,有错误请大家谅解并指点,谢谢大家~~
WebApplicationContext是什么?
WebApplicationContext是专门从web根目录的路径中加载配置文件进行初始化。
在WebApplicationContext中获取ServletContext的引用,将web上下文对象放入ServletContext中,这样web应用就可以访问Spring应用上下文。
WebApplicationContext的实现方式是什么?
Spring给WebApplicationContext提供了一个工具类WebApplicationContextUtils的getWebApplicationContext(ServletContext sc)的方法,从ServletContext中获取WebApplicationContext实例。
getWebApplicationContext(ServletContext sc)方法的内部实现代码:
WebApplicationContext wac = (WebApplicationContext)servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
WebApplicationContext与BeanFactory和Applicationcontext有什么不同。
WebApplicationContext初始化不同于BeanFactory和ApplicationContext,因为WebApplicationContext需要ServletContext实例,它必须要有web容器才能启动工作。
现在web开发都是需要在web.xml中配置web容器监听器(也就是ServletContextListener)或者自定义Servlet。

Spring为WebApplicationContext分别准备了对应的Servlet和web容器监听器:
org.springframework.web.context.ContextLoadServlet。
org.springframework.web.context.ContextLoadListener。
二者内部都实现了WebApplicationContext加载实例的逻辑,只要在web.xml中配置就可以。

使用ContextLoaderListener启动WebApplicationContext的web.xml配置
...
<!--指定配置文件-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
<!--如果有多个用“,”隔开-->
/WEB-INF/XXXX.xml
</param-value>
</context-param>
<listerner>
<lister-class>org.springframework.web.context.ContextLoaderListener</lister-class>
</listerner>
...
ContextLoaderListener通过web容器上下文contextConfigLocation获取Spring配置文件位置。

使用ContextLoaderServlet启动WebApplicationContext的web.xml配置
...
<!--指定配置文件-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/XXXX.xml
<param-value>
</context-param>

<!--声明servlet-->
<servlet>
<servlet-name>springContextLoaderServlet</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<!--启动顺序-->
<load-on-startup>1</load-on-startup>
</servlet>
...

猜你喜欢

转载自blog.csdn.net/m0_38016299/article/details/77978732
今日推荐