快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18

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

时间:2011-03-29 javaeye jiwenke

以下引用自博客:http://jiwenke-spring.blogspot.com/ 

上面我们分析了IOC容器本身的实现,下面我们看看在典型的web环境中,Spring IOC 容器是怎样被载入和起作用的。

简单的说,在web容器中,通过ServletContext为Spring的IOC容器提供宿主环境,对 应的建立起一个IOC容器的体系。其中,首先需要建立的是根上下文,这个上下文持有的 对象可以有业务对象,数据存取对象,资源,事物管理器等各种中间层对象。在这个上下 文的基础上,和web MVC相关还会有一个上下文来保存控制器之类的MVC对象,这样就构成 了一个层次化的上下文结构。在web容器中启动Spring应用程序就是一个建立这个上下文 体系的过程。Spring为web应用提供了上下文的扩展接口

WebApplicationContext:

代码

public interface WebApplicationContext extends ApplicationContext {    //这里定义的常量用于在ServletContext中存取根上下文    String ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE = WebApplicationContext.class.getName() + ".ROOT";    ......    //对WebApplicationContext来说,需要得到Web容器的ServletContext    ServletContext getServletContext(); }

而一般的启动过程,Spring会使用一个默认的实现,XmlWebApplicationContext - 这 个上下文实现作为在web容器中的根上下文容器被建立起来,具体的建立过程在下面我们 会详细分析。

代码

public class XmlWebApplicationContext extends AbstractRefreshableWebApplicationContext {    /** 这是和web部署相关的位置信息,用来作为默认的根上下文bean定义信息的存 放位置*/    public static final String DEFAULT_CONFIG_LOCATION = "/WEB- INF/applicationContext.xml";    public static final String DEFAULT_CONFIG_LOCATION_PREFIX = "/WEB- INF/";    public static final String DEFAULT_CONFIG_LOCATION_SUFFIX = ".xml";    //我们又看到了熟悉的loadBeanDefinition,就像我们前面对IOC容器的分析中一 样,这个加载工程在容器的refresh()的时候启动。    protected void loadBeanDefinitions(DefaultListableBeanFactory beanFactory) throws IOException {      //对于XmlWebApplicationContext,当然使用的是XmlBeanDefinitionReader 来对bean定义信息来进行解析      XmlBeanDefinitionReader beanDefinitionReader = new XmlBeanDefinitionReader(beanFactory);      beanDefinitionReader.setResourceLoader(this);      beanDefinitionReader.setEntityResolver(new ResourceEntityResolver (this));      initBeanDefinitionReader(beanDefinitionReader);      loadBeanDefinitions(beanDefinitionReader);    }    protected void initBeanDefinitionReader(XmlBeanDefinitionReader beanDefinitionReader) {    }    //使用XmlBeanDefinitionReader来读入bean定义信息    protected void loadBeanDefinitions(XmlBeanDefinitionReader reader) throws BeansException, IOException {      String[] configLocations = getConfigLocations();      if (configLocations != null) {        for (int i = 0; i < configLocations.length; i++) {          reader.loadBeanDefinitions(configLocations[i]);        }      }    }    //这里取得bean定义信息位置,默认的地方是/WEB- INF/applicationContext.xml    protected Stri

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号