首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

spring 的IOC Service Provider 形验方式探索- 学习记录

2012-06-28 
spring 的IOC Service Provider 形成方式探索- 学习记录通过spring官方文档可以很快知道怎么操作XML文件,

spring 的IOC Service Provider 形成方式探索- 学习记录

通过spring官方文档可以很快知道怎么操作XML文件,生成我们想要的IOC容器。可是我想知道Spring给我们提供的IOC 容器是怎么生成出来的。为何通过一个BeanFactory或是ApplicationContext就能获取我们想要的对象信息

在spring2.5中,Spring给我们提供生成IOC容器的方式有很多种。 1.硬编码 2.采用资源文件配置 3. XML形式配置 4. 注解,在spring3.0中还提供了一种javaconfig方式。这里先通过硬编码方式表现IOC容器是如何产生的,然后再给出XML的方式是如何获得BeanFactory和ApplicationContext的方法

首先给大家看看我的Demo目录和目录中相应文件中的代码:

spring 的IOC Service Provider 形验方式探索- 学习记录
其中我的UserServiceImpl是如下实现的,很简单:

?

?


我的XML配置,后面将解析的spring.xml配置

?



在AppRun 中我添加了如下的代码,希望运行后,能顺利的执行 printInfo()方法



这张图很清楚的描绘了BeanFactory ,DefaultListableBeanFactory ,BeanDefinitionRegistry,以及 XmlBeanFactory之间的关系。

BeanFactory是对生成的Bean进行管理的接口
BeanDefinitionRegistry定义了Bean注册的逻辑
DefaultListableBeanFactory 同时实现了 BeanFactory 和 BeanDefinitionRegistry 2个接口, 从而实现了Bean的注册和管理。

每一个受管的对象在容器中都会有一个BeanDefinition与之对应,负责保存对象所有的必要信息,其中包括对象的类型,是否是抽象类,构造方法参数,以及其它属性。 当客户端向BeanFactory请求一个对象的时候,BeanFactory会通过这些信息为客户端返回一个完备可用的对象实例。


对于配置文件的解析,spring提供了XmlBeanDefinitionReader,PropertiesBeanDefinitionReader 2种喜闻乐见的方式,也可以自己定义一种方式来实现,比如喜欢json风格的朋友,可以自己编写一套json的解析方式。

XML 解析方式

如下就是通过XmlBeanDefinitionReader来解析的做法


从这张图中可以看出
1. ApplicationContext 间接继承于 BeanFactory 。 所以用BeanFactory 能操作的东东,ApplicationContext 也可以。
2. ApplicationContext 所实现的功能远比BeanFactory的功能多。比如国际化,事件发布等

ps:
在实际使用中,大家可以观察到使用ApplicationContext来加载资源文件,速度相比BeanFactory会慢很多,占用的系统资源也相对较多。这里主要是因为
采用ApplicationContext默认一开始就初始化所有的对象,而BeanFactory是在首次访问时才初始化这些对象。

热点排行