- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Spring源代码解析(一):IOC容器
对于Spring的使用者而言,IOC容器实际上是什么呢?我们可以说BeanFactory就是我们看到的IoC容器,当然了Spring为我们准备了许多种IoC容器来使用,这样可以方便我们从不同的层面,不同的资源位置,不同的形式的定义信息来建立我们需要的IoC容器。?
在Spring中,最基本的IOC容器接口是BeanFactory - 这个接口为具体的IOC容器的实现作了最基本的功能规定 - 不管怎么着,作为IOC容器,这些接口你必须要满足应用程序的最基本要求:?
在BeanFactory里只对IOC容器的基本行为作了定义,根本不关心你的bean是怎样定义怎样加载的
Spring提供了一个BeanFactory的基本实现,XmlBeanFactory同样的通过使用模板模式来得到对IOC容器的抽象- AbstractBeanFactory,DefaultListableBeanFactory这些抽象类为其提供模板服务。其中通过resource 接口来抽象bean定义数据,对Xml定义文件的解析通过委托给XmlBeanDefinitionReader来完成。
下面简单的演示IOC容器的创建过程:
这些代码演示了以下几个步骤:??? 1. 创建IOC配置文件的抽象资源??? 2. 创建一个BeanFactory?
?? 3. 把读取配置信息的BeanDefinitionReader,这里是XmlBeanDefinitionReader配置给BeanFactory?
?? 4. 从定义好的资源位置读入配置信息,具体的解析过程由XmlBeanDefinitionReader来完成,这样完成整个载入bean定义的过程。我们的IoC容器就建立起来了。
XmlBeanFactory
进入org.springframework.beans.factory.xml.XmlBeanFactory 可以看到,XmlBeanFactory实现了刚才上面演示的几个步骤
ApplicationContext?
除了XmlBeanFactory,Spring还提供了另一种IOC容器----ApplicationContext?(常用的上下文)
在BeanFactory基础上扩展出的ApplicationContext - 我们最常使用的上下文。除了具备BeanFactory的全部能力,上下文为应用程序又增添了许多便利:???? * 可以支持不同的信息源,我们看到ApplicationContext扩展了MessageSource???? * 访问资源 , 体现在对ResourceLoader和Resource的支持上面,这样我们可以从不同地方得到bean定义资源???? * 支持应用事件,继承了接口ApplicationEventPublisher,这样在上下文中引入了事件机制而BeanFactory是没有的。
public FileSystemXmlApplicationContext(String configLocation) throws BeansException {
this(new String[] {configLocation}, true, null);
}
关键是reflesh()。这个方法包含了整个BeanFactory初始化的过程,对于特定的FileSystemXmlBeanFactory,我们看到定位资源位置由refreshBeanFactory()来实现:?
XmlBeanDefinitionReader来解析资源文件。
可以看到在loadBeanDefinitions里面调用同名的父方法。其其抽象父类的AbstractBeanDefinitionReader中来定义载入过程
当我们通过ResourceLoader来载入资源,别忘了了我们的GenericApplicationContext也实现了ResourceLoader接口:
而我们的FileSystemXmlApplicationContext就是一个DefaultResourceLoader - GenericApplicationContext()通过DefaultResourceLoader:?
我们的FileSystemXmlApplicationContext本身就是是DefaultResourceLoader的实现类,他实现了以下的接口:
这样代码就回到了FileSystemXmlApplicationContext中来,他提供了FileSystemResource来完成从文件系统得到配置文件的资源定义。
上面我们看到的是定位Resource的一个过程,而这只是加载过程的一部分 - 我们回到Ab
您可能关注的文档
最近下载
- 房屋建筑加固改造工程施工重点及难点分析与对策.pdf VIP
- 【基恩士】LR-W500(C) 使用说明书 (简体中文).pdf VIP
- 2025年全国危险化学品经营单位主要负责人考试试题含答案.docx VIP
- 依利特MFD3100多波长荧光检测器用户手册.pdf VIP
- 医疗气体系统施工的质量监控重点及监理措施(可编辑word版).doc VIP
- 《西门子接口模块 ET 200M IM 153 2 产品手册 中文超清版》.pdf VIP
- 压力性尿失禁的护理查房PPT课件.pptx VIP
- 九年级下册化学《金属》习题巩固.doc VIP
- 索尼sony_mdsje480_使用说明书手册.pdf VIP
- 城市管理网格员(中级)考试题库(浓缩300题).docx VIP
文档评论(0)