快速业务通道

Spring源代码解析(一):IOC容器 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18
器的初始化过程,其初始化过程的大致步骤由AbstractApplicationContext来定义      refresh();    } }

refresh的模板在AbstractApplicationContext:

代码

public void refresh() throws BeansException, IllegalStateException {    synchronized (this.startupShutdownMonitor) {      synchronized (this.activeMonitor) {        this.active = true;      }      // 这里需要子类来协助完成资源位置定义,bean载入和向IOC容器注册的过程      refreshBeanFactory();      ............ }

这个方法包含了整个BeanFactory初始化的过程,对于特定的FileSystemXmlBeanFactory,我们看到定位资源位置由refreshBeanFactory()来实现:

在AbstractXmlApplicationContext中定义了对资源的读取过程,默认由XmlBeanDefinitionReader来读取:

代码

protected void loadBeanDefinitions(DefaultListableBeanFactory beanFactory) throws IOException {    // 这里使用XMLBeanDefinitionReader来载入bean定义信息的XML文件    XmlBeanDefinitionReader beanDefinitionReader = new XmlBeanDefinitionReader(beanFactory);    //这里配置reader的环境,其中ResourceLoader是我们用来定位bean定义信息资源位置的    ///因为上下文本身实现了ResourceLoader接口,所以可以直接把上下文作为ResourceLoader传递给XmlBeanDefinitionReader    beanDefinitionReader.setResourceLoader(this);    beanDefinitionReader.setEntityResolver(new ResourceEntityResolver(this));    initBeanDefinitionReader(beanDefinitionReader);    //这里转到定义好的XmlBeanDefinitionReader中对载入bean信息进行处理    loadBeanDefinitions(beanDefinitionReader); }

转到beanDefinitionReader中进行处理:

代码

protected void loadBeanDefinitions(XmlBeanDefinitionReader reader) throws BeansException, IOException {    Resource[] configResources = getConfigResources();    if (configResources != null) {      //调用XmlBeanDefinitionReader来载入bean定义信息。      reader.loadBeanDefinitions(configResources);    }    String[] configLocations = getConfigLocations();    if (configLocations != null) {      reader.loadBeanDefinitions(configLocations);    } }

Spring源代码解析(一):IOC容器(4)

时间:2011-03-29

而在作为其抽象父类的AbstractBeanDefinitionReader中来定义载入过程:

代码

public int loadBeanDefinitions(String location) throws BeanDefinitionStoreException { //这里得到当前定义的ResourceLoader,默认的我们使用DefaultResourceLoader ResourceLoader resourceLoader = getResourceLoader(); .........//如果没有找到我们需要的ResourceLoader,直接抛出异常    if (resourceLoader instanceof ResourcePatternResolver) {      // 这里处理我们在定义位置时使用的各种pattern,需要ResourcePatternResolver来完成      try {        Resource[] resources = ((ResourcePatternResolver) resourceLoader).getResources(location);        int loadCount = loadBeanDefinitions(resources);        return loadCount;      }     ........    }    else {      // 这里通过ResourceLoader来完成位置定位      Resource resource = resourceLoader.getResource(location);      // 这里已经把一个位置定义转化为Resource接口,可以供XmlBeanDefinition

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