首页 > 其他 > 详细

Spring-IOC学习-02 IOC容器初始化

时间:2014-02-23 21:27:09      阅读:491      评论:0      收藏:0      [点我收藏+]

上次说到spring IOC 过程中的几个重要接口: Resource, BeanDefinition, BeanDefinitionRender ,BeanFactory, ApplicationContext 

简单说了spring 的bean初始化流程:由 Resource接口的具体实现定位,读取资源文件。交给BeanfinintionRender进行bean的解析解析得到

 bean的描述对象BeanDefinition 。最后 BeanDefinitionRegister 会将已经等到的bean注册到 BeanFactory 容器中去完成bean的实例化

过程。

首先请看一个简单使用Spring的代码:

 bubuko.com,布布扣 

不知道有没有这样使用过spring呢!这正是上面所说的spring在IOC初始化时的三个步骤。这样的获取是不是让你更明白IOC的初始化脉络?

我们可以将 IOC容器初始化(bean的实例化) 过程分为 3 个部分 A:资源文件的定位  B:bean的解析,加载  C:bean的"注册"将解析后的BeanDefinition对象注册到BeanFactory

中去.(该初始化过程是不包涵Bean 的依赖注入的 ,何时完成依赖呢? )  慢慢往下看吧......

 

步骤1: BeanDefinition 资源文件的定位。

  上次说到spring 中有个重要的接口Resource 该接口负责Spring 资源文件的加载读取等操作.Reource根据不同的文件类型定位BeanDefinition。

还记得FileSystemResource,ClassPathResource这俩个子类吗?他们都是 Resource 的具体实现。分别读取不同路径下的资源文件获取BeanDefinition

  查看上面的代码Spring  通过Resource 来定位BeanDefinition资源文件,然后在使用BeanDefinitionRender来将定位的资源文件处理后得到Spring要使用的BeanDefinition

对象。因为我们使用的是单纯的容器仅仅是一个能装载 bean 的容器而已所以对于要使用什么样的Resource,什么样的BeanDefinitioRender都是由我们自己说了算的,所以这里就

很灵活了但是,因为什么都要自己定制工作量就上来了。

  为什么会这么说?还记得ApplicationContext这个NB的接口吗?找个具体实现去看看吧为啥咱们在使用spring提供的这个接口的时候不用这写额外操作呢?因为别人办理做了呀看

看别人怎么做的吧!

  bubuko.com,布布扣

怎么样很简单吧!!!!

既然他已经得到了具体的Resource,那么FileSystemApplicationContext是怎样进行数据处理的,他是如何初始化BeanDefinition,BeanDefinitionRender的呢?查看该类并没有香瓜的代码,

仅包含多个构造的重载方法,还有这个定位资源文件的方法 getResourceByPath(....);

那么只有向他的父类找答案了! 在 AbstractRefreshableWebApplicationContext 中找到了答案! 看看FileSystemXmlApplicationContext的继承关系

bubuko.com,布布扣 

  查看到AbstractRefreshableWebApplicationContext类的时候发了问题看一下refreshBeanFactory()方法吧!

bubuko.com,布布扣

 

 

 

  

  

 

 

 

 

2:BeanDefinition的载入过程

 

3:将已经解析好的BeanDefinition注册到Ioc容器中去.

Spring-IOC学习-02 IOC容器初始化

原文:http://www.cnblogs.com/javafengyi/p/3561772.html

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