欢迎来到天天文库
浏览记录
ID:10227490
大小:469.00 KB
页数:9页
时间:2018-06-12
《spring源码分析_spring ioc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Spring源代码解析(一):IOC容器基本概念对于Spring的使用者而言,IOC容器实际上是什么呢?我们可以说BeanFactory就是我们看到的IoC容器,当然了Spring为我们准备了许多种IoC容器来使用,这样可以方便我们从不同的层面,不同的资源位置,不同的形式的定义信息来建立我们需要的IoC容器。 在Spring中,最基本的IOC容器接口是BeanFactory-这个接口为具体的IOC容器的实现作了最基本的功能规定-不管怎么着,作为IOC容器,这些接口你必须要满足应用程序的最基本要求: BeanFactory的实现在BeanFactor
2、y里只对IOC容器的基本行为作了定义,根本不关心你的bean是怎样定义怎样加载的。Spring提供了一个BeanFactory的基本实现,XmlBeanFactory同样的通过使用模板模式来得到对IOC容器的抽象-AbstractBeanFactory,DefaultListableBeanFactory这些抽象类为其提供模板服务。其中通过resource接口来抽象bean定义数据,对Xml定义文件的解析通过委托给XmlBeanDefinitionReader来完成。下面简单的演示IOC容器的创建过程:这些代码演示了以下几个步骤: 1.创建IO
3、C配置文件的抽象资源 2.创建一个BeanFactory [容器,装在beans的Map实体,还有定义了一些对bean的操作] 3.把读取配置信息的BeanDefinitionReader,这里是XmlBeanDefinitionReader配置给BeanFactory [解析资源文件] 4.从定义好的资源位置读入配置信息,具体的解析过程由XmlBeanDefinitionReader来完成,这样完成整个载入bean定义的过程。我们的IoC容器就建立起来了。[最后保存是通过map的更新,通过bean_name=>bean_definitio
4、ns(bean的实体)]XmlBeanFactory进入org.springframework.beans.factory.xml.XmlBeanFactory可以看到,XmlBeanFactory实现了刚才上面演示的几个步骤ApplicationContext 除了XmlBeanFactory,Spring还提供了另一种IOC容器----ApplicationContext (常用的上下文)在BeanFactory基础上扩展出的ApplicationContext-我们最常使用的上下文。除了具备BeanFactory的全部能力,上下文为应用程序又
5、增添了许多便利: *可以支持不同的信息源,我们看到ApplicationContext扩展了MessageSource *访问资源,体现在对ResourceLoader和Resource的支持上面,这样我们可以从不同地方得到bean定义资源 *支持应用事件,继承了接口ApplicationEventPublisher,这样在上下文中引入了事件机制而BeanFactory是没有的。那ApplicatiionContextIOC容器是怎么建立的呢?很简单,只需要一个句话就可以:publicFileSystemXmlApplicatio
6、nContext(StringconfigLocation)throwsBeansException{this(newString[]{configLocation},true,null);}关键是reflesh()。这个方法包含了整个BeanFactory初始化的过程,对于特定的FileSystemXmlBeanFactory,我们看到定位资源位置由refreshBeanFactory()来实现: 继承了AbstractApplicationContext,并且在loadBeanDefinitions通过XmlBeanDefinitionRead
7、er来解析资源文件。可以看到在loadBeanDefinitions里面调用同名的父方法。其其抽象父类的AbstractBeanDefinitionReader中来定义载入过程:当我们通过ResourceLoader来载入资源,别忘了了我们的GenericApplicationContext也实现了ResourceLoader接口:而我们的FileSystemXmlApplicationContext就是一个DefaultResourceLoader-GenericApplicationContext()通过DefaultResourceLoade
8、r: 我们的FileSystemXmlApplicationContext本身就是是DefaultResourceLoad
此文档下载收益归作者所有