我的第一篇:浅析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。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值