浅析spring中的webApplicationContext

    很多辅导教材,网络教程都认为,webApplicationContext是由 contextLoaderListener或者contextLoaderServlet加载web.xml中的param参数 contextConfigLocation初始化的。起初我也这么认为,但通过对Rod johnson的《spring框架高级编程》中相关知识的学习和查看相关代码,我发现事情并非如此。
      由 contextLoaderListener(或者contextlorderServlet)加载的并非webApplicationContext, 而是webApplicationContext的父context,这个ApplicationContext被初始化后,因为是 rootContext,其父context被设为空,并在生成过程中将其自身绑定为servletContext的一个属性。 ApplicationContext是由contextLoaderListener(或者contextLorderServlet)生成的 contextLoader生成的。contextLoader的initwebapplicationcontext()方法(此方法中生成父 context,此时显然为null),createwebapplicationcontext()方法(此方法中生成 ApplicationContext,设置父context,即null)具体生成ApplicationContext。
      正 的webApplicationContext是由DispatcherServlet初始化的。首先看web.xml有没有给 DispatcherServlet定义 init-param参数contextconfiglocation,如果有就由此参数指定的配置文件初始化 webApplicationContext;若没有,会根据dispatcherServlet的namespace属性指定的配置文件(一般为 [servletname]-servlet.xml文件)来生成webApplicationContext。与ApplicationContext 不同,webApplicationContext是由DispatcherServlet中的initwebapplicationcontext() (因为contextloader生成ApplicationContext一般会设置较高的优先级,所以此时方法中可按名索引已经绑定为 ServletContext属性的ApplicationContext,作为父context),和 createwebapplicationcontext()(此方法中生成webApplicationContext,设置父context,即 ApplicationContext)生成的。生成的webapplicationcontext以 org.springframework.web.servlet.Frameworkservlet.CONTEXT为key保存在 servletcontext里。
      Spring Web应用程序中的每个DispathcherServlet都有一个关联的webApplicationContext,当有多个 DispathcherServlet时,其他DispathcherServlet不能使用由特定DispathcherServlet初始化的 webApplicationContext。webApplicationContext与DispathcherServlet集成,并管理所有 web相关组件,如控制器,视图,URL映射及拦截器。webApplicationContext继承了ApplicationContext的所有功 能,此外还持有一个servletContext的引用(与servletcontext绑定)。如有需要,可扩展 org.springframework.web.context.support.WebApplicationObjectSupport,调用其方 法getWebApplicationContext(),getServletContext()访问web应用上下文,或 ServletContext。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值