《Spring揭秘》第四章 读书笔记 —— Spring的IoC容器之BeanFactory

来源:互联网 发布:深圳市橙子网络 编辑:程序博客网 时间:2024/06/08 02:08

在进入BeanFactory之前,还是先说说IoC容器和IoC Service Provider之间的关系
Spring的IoC容器和IoC Service Provider之间的关系

Spring提供了两个容器:正准备介绍的BeanFactory和ApplicationContext容器

  • BeanFactory 基础类型IoC容器,提供完整的IoC服务支持,默认采用lazy-inti初始化方式
    适用:资源有限、功能要求不是很严格
  • ApplicationContext 在BeanFactory基础之上构建,提供高级特性:事件发布和国际化信息支持
    两者准确的关系怎么样的呢:
    BeanFactory和ApplicationContext之间的关系

准确的来说,BeanFactory真正能够改变的东西,就是之前我们想要获取某个对象的时候,是自己去创建,主动寻找获取;而BeanFactory可以将我们需要的依赖推送过来。
通常的话,会通过XML文件来实现这种依赖管理:

<beans>    <bean id="djNewsProvider" class="..FXNewsProvider">        <constructor-arg index="0">            <ref bean="djNewsListener"/>        </constructor-arg>         <constructor-arg index="1">             <ref bean="djNewsPersister"/>        </constructor-arg>    </bean>    ...</beans>

具体的实现:

ApplicationContext container = new ClassPathXmlApplicationContext("配置文件路径");FXNewsProvider newsProvider = (FXNewsProvider)container.getBean("djNewsProvider"); newsProvider.getAndPersistNews();

这里的调用是通过getBean()方法获取,从这里可以看出spring的具体怎么实现映射。
BeanFactory 只是一个接口,所以具体的使用中,需要使用一个具体实现类实现该接口进行Bean的管理。

这里写图片描述

可以通过图中的关系结构看出,虽然我们需要的对象都是属于BeanFactory的,实际上使用的对象是在BeanDefinitionRegistry中的,书中的比方就很恰当:BeanFactory相当于图书馆,虽然借书要进图书馆,但是书都放在书架上面,所以图中的BeanDefinitionRegistry就像是图书馆的书架。

Spring提供了org.springframework.beans.factory.support.PropertiesBeanDefinition-Reader类用于Properties格式配置文件的加载,所以提供好配置文件

文中有提到BeanFactory的对象注册和依赖绑定,直接编码格式,这种方式是经历了注册-构造-setter(),最终完成绑定;另一种方式就是基于注解的依赖注入。

0 0
原创粉丝点击