首页 > 其他 > 详细

BeanDefinition的Resource定位

时间:2014-09-18 11:22:43      阅读:263      评论:0      收藏:0      [点我收藏+]

1.以编程的方式使用DefaultListableBeanFactory时,首先定义一个Resource定位容器使用的BeanDefiniton。这时使用的是ClassPathResource,这意味着Spring会在类路径中去寻找以文件形式存在的BeanDefinition信息。

 

ClassPathResource res = new ClassPathResource("beans.xml");

 

这里定义的Resource并不能由DefaultListableBeanFactory直接使用,Spring通过BeanDefinitionReader来对这些信息进行处理。在这里,我们也可以看到使用ApplicationContext相对于直接使用DefaultListableBeanFactory的好处。因为在ApplicationContext中,Spring已经为我们提供了一系列加载不同Resource的读取的实现,而DefaultListableBeanFactory只是一个存粹的IoC容器,需要为它配置特定的读取器才能完成这些功能。当然,有利就有弊,使用DefaultListableBeanFactory这种底层的容器,能提高定制IoC容器的灵活性。

2.回到我们经常使用的ApplicationContext上来,例如FileSystemXmlApplicationContextClassPathXmlApplicationContext以及XmlWebApplication等。简单地从这些类的名字上分析,可以清楚地看到它们可以提供哪些不同的Resource读入功能,比如FileSystemXmlApplicationContext可以从文件系统载入ResourceClassPathXmlApplicationContext可以从Class Path载入ResourceXmlWebApplicationContext可以在Web容器中载入Resource,等等。

3.下面以FileSystemXmlApplicationContext为例,通过分析这个ApplicationContext的实现来看看它是怎样完成这个Resource定位过程的。作为辅助,我们可以在下图中看到相应的ApplicationContext集成体系

bubuko.com,布布扣

FileSystemXmlApplicationContext的继承体系

 

1.从源码的实现角度,我们可以近距离关心以FileSystemXmlApplicationContext为核心的继承体系,如下图所示。

bubuko.com,布布扣

1.从上图可以看到,这个FileSystemXmlApplicationContext已经通过继承AbstractApplicationContext具备了ResourceLoader读入以Resource定义的BeanDefinition的能力,因为AbstractApplicationContext基类DefaultResourceLoader。下面我们看看FileSystemXmlApplicationContext具体实现

 

BeanDefinition的Resource定位

原文:http://www.cnblogs.com/duffy/p/3972310.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!