WebApplicationContext初始化
《WebApplicationContext初始化
ApplicationContext是Spring的核心,Context我們通常解釋為上下文環(huán)境,我想用“容器”來表述它更容易理解一些,ApplicationContext則是“應用的容器”了;在Web應用中,我們會用到WebApplicationContext,WebApplicationContext繼承自ApplicationContext;WebApplicationContext的初始化方式和BeanFactory.ApplicationContext有所區(qū)別,因為WebApplicationContext需要ServletContext實例,也就是說它必須擁有Web容器的前提下才能完成啟動的工作.有過Web開發(fā)經(jīng)驗的讀者都知道可以在web.xml中配置自啟動的Servlet或定義Web容器監(jiān)聽器(ServletContextListener),借助著兩者中的任何一個,我們就可以啟動Spring Web應用上下文的工作.Spring分別提供了用于啟動WebApplicationContext的Servlet和Web容器監(jiān)聽器:
org.springframework.web.context.ContextLoaderServlet;
org.springframework.web.context.ContextLoaderListener.
這兩個方法都是在web應用啟動的時候來初始化WebApplicationContext,我個人認為Listerner要比Servlet更好一些,因為Listerner監(jiān)聽應用的啟動和結束,而Servlet得啟動要稍微延遲一些,如果在這時要做一些業(yè)務的操作,啟動的前后順序是有影響的。
配置例子如下:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
以ContextLoaderListener為例,我們可以看到
public void contextInitialized(ServletContextEvent event) {
this.contextLoader = createContextLoader();
this.contextLoader.initWebApplicationContext(event.getServletContext());
}
protected ContextLoader createContextLoader() {
return new ContextLoader();
}
ContextLoader是一個工具類,用來初始化WebApplicationContext,其主要方法就是initWebApplicationContext,我們繼續(xù)追蹤initWebApplicationContext這個方法(具體代碼我不貼出,大家可以看Spring中的源碼),我們發(fā)現(xiàn),原來ContextLoader是把WebApplicationContext(XmlWebApplicationContext是默認實現(xiàn)類)放在了ServletContext中,ServletContext也是一個“容器”,也是一個類似Map的結構,而WebApplicationContext在ServletContext中的KEY就是WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,我們?nèi)绻褂肳ebApplicationContext則需要從ServletContext取出,Spring提供了一個WebApplicationContextUtils類,可以方便的取出WebApplicationContext,只要把ServletContext傳入就可以了。
轉載于:https://blog.51cto.com/longx/1321153
總結
以上是生活随笔為你收集整理的WebApplicationContext初始化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Revit API取得变量的内参名称
- 下一篇: 从程序员到项目经理(二十九):怎样写文档