快速业务通道

Spring源代码解析(二):IOC容器在web容器中的启动 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18
的属性值是      //ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,以后的应用都是根据这个属 性值来取得根上下文的 - 往往作为自己上下文的父上下文      this.context = createWebApplicationContext(servletContext, parent);      servletContext.setAttribute(          WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, this.context);      ..........      return this.context;    }     ............ }

Spring源代码解析(二):IOC容器在web容器中的启动(3)

时间:2011-03-29 javaeye jiwenke

建立根上下文的父上下文使用的是下面的代码,取决于在web.xml中定义的参数: locatorFactorySelector,这是一个可选参数:

代码

protected ApplicationContext loadParentContext(ServletContext servletContext)      throws BeansException {    ApplicationContext parentContext = null;    String locatorFactorySelector = servletContext.getInitParameter (LOCATOR_FACTORY_SELECTOR_PARAM);    String parentContextKey = servletContext.getInitParameter (LOCATOR_FACTORY_KEY_PARAM);    if (locatorFactorySelector != null) {      BeanFactoryLocator locator = ContextSingletonBeanFactoryLocator.getInstance(locatorFactorySelector);      ........      //得到根上下文的父上下文的引用      this.parentContextRef = locator.useBeanFactory (parentContextKey);      //这里建立得到根上下文的父上下文      parentContext = (ApplicationContext) this.parentContextRef.getFactory();    }    return parentContext; }

得到根上下文的父上下文以后,就是根上下文的创建过程:

代码

protected WebApplicationContext createWebApplicationContext(      ServletContext servletContext, ApplicationContext parent) throws BeansException {    //这里需要确定我们载入的根WebApplication的类型,由在web.xml中配置的 contextClass中配置的参数可以决定我们需要载入什么样的ApplicationContext,    //如果没有使用默认的。    Class contextClass = determineContextClass(servletContext);    .........    //这里就是上下文的创建过程    ConfigurableWebApplicationContext wac =        (ConfigurableWebApplicationContext) BeanUtils.instantiateClass (contextClass);    //这里保持对父上下文和ServletContext的引用到根上下文中    wac.setParent(parent);    wac.setServletContext(servletContext);    //这里从web.xml中取得相关的初始化参数    String configLocation = servletContext.getInitParameter (CONFIG_LOCATION_PARAM);    if (configLocation != null) {      wac.setConfigLocations(StringUtils.tokenizeToStringArray (configLocation,          ConfigurableWebApplicationContext.CONFIG_LOCATION_DELIMITERS));    }   //这里对WebApplicationContext进行初始化,我们又看到了熟悉的refresh调用。    wac.refresh();    return wac; }

初始化根ApplicationContext后将其存储到SevletContext中去以后,这样就建立了一 个全局的关于整个应用的上下文。这个根上下文会被以后的DispatcherServlet初始化自 己的时候作为自己ApplicationContext的父上下文。这个在对 DispatcherServlet做分析 的时候我们可以看看到。

Spring源代码解析(二):IOC容器在web容器中的启动(4)

时间:2011-03-29 javaeye jiwenke

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号