- 1、本文档共34页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《spring ioc 分析》.pdf
Spring IOC容器实现分析
准备工作
我们都知道,IOC容器和AOP是Spring框架的核心,To the developer, for the developer and by
the developer - 简化JAVA 业应用的的开发是Spring框架的目标,为更好的使用IOC容器,我们结
合Spring IOC的源代码对它的实现作一个分析。在了解IOC容器实现的基础上,Spring的使用者可以跟
好的使用IOC容器和Spring框架,同时如果需要对Spring框架作自己的扩展,这些方面的了解也是很有
必要的。我们在这里假设读者已经具备对Spring IOC容器使用的基本知识 - 关于对Spring IOC容器的
使用,可以参考以下的参考资料,这里就不对一些使用和配置的问题多做讲解了。
• Spring Framework Reference Guide
• Spring In Action
• Expert One-on-one J2EE Development without EJB
• Professional Java Development with the Spring Framework
还需要准备好Spring的源代码,我们这里用的代码是Spring2.0,当然了一个可以查看源代码的编辑器
也是需要的,这里使用的是Eclipse3.2 - 很多说明性的图例都是直接从屏幕拷贝下来的。下面是一些文
章中用到的专有词汇:
上下文:ApplicationContext
Bean定义信息:BeanDefinition
Bean工厂:BeanFactory
工厂Bean:FactoryBean
单件:Singleton
概述:基本IOC容器和上下文
因为IOC容器为应用开发者管理对象之间的依赖关系提供了很多便利和基础服务,所以业界有许多IOC
容器供开发者选择,Spring Framework就是其中的一个。对Spring IOC容器的使用来说,我们常常接
触到的Bean工厂和上下文就是IOC容器的表现形式,在这些Spring提供的基本IOC容器的接口定义和
实现的基础上,我们通过定义Bean定义信息来管理应用中的对象依赖关系。
在使用Spring IOC容器的时候,了解Bean工厂和上下文之间的区别对我们了解Spring IOC容器是比
较重要的。从实现上来看,IOC容器定义的基本接口是在Bean工厂定义的,也就是说Bean工厂是
Spring IOC容器的最基本的形式,很显然,BeanFactory只是一个接口类,没有给出IOC容器的实现,
只是对IOC容器需要提供的最基本的服务做了定义,象我们下面看到的
DefaultListableBeanFactory,XmlBeanFactory, ApplicationContext这些都可以看成是IOC容器
的某种具体实现。看看Bean工厂是怎样定义IOC容器的基本服务的:
public interface BeanFactory {
//这里是对工厂Bean的转义定义,因为如果使用bean的名字检索IOC容器得到的对象是工厂Bean
生成的对象,
//如果需要得到工厂Bean本身,需要使用转义的名字来向IOC容器检索
String FACTORY_BEAN_PREFIX = ;
//这里根据bean的名字,在IOC容器中得到bean实例,这个IOC容器就象一个大的抽象工厂,用户可
以根据名字得到需要的bean
//在Spring中,Bean和普通的JAVA对象不同在于:
//Bean 已经包含了我们在Bean定义信息中的依赖关系的处理,同时Bean是已经被放到IOC容器中
进行管理了,有它自己的生命周期
Object getBean(String name) throws BeansException;
//这里根据bean的名字和Class类型来得到bean实例,和上面的方法不同在于它会抛出异常:如果根
据名字取得的bean实例的Class类型和需要的不同的话。
Object getBean(String name, Class requiredType) throws BeansException;
//这里提供对bean的检索,看看是否在IOC容器有这个名字的bean
boolean containsBean(String name);
//这里根据bean名字得到bean实例,并同时判断这个bean是不是单件,在配置的时候,
文档评论(0)