第二章 bean捆绑基础(1节)

    介绍Spring容器

    声明bean

    通过构造器和set函数注入

    捆绑bean

    控制bean的创建和删除

 

Spring中,对象不需要寻找或者创建需要协作的对象的实例,代替的是,通过容器来进行注入。例如,一个订单管理组件是基本的DI,经常被认为是wiring(捆绑,我认为)。这章,我们学习使用Spring捆绑bean的基础。有很多技术可以使用。

2.1容纳你的bean

Spring程序中,对象生存在容器中。图2.1所示,对象由容器生成,捆绑在一起,进行配置,管理生存期。

2.2中,可以看到如何配置Spring来知道,哪个对象来创建,配置和捆绑在一起。第一步,要了解对象存放的容器。理解容器对如何管理程序有好处。

容器是Spring框架的核心。Spring实现的容器有几种,分为2个类型。Bean factoriescom.springframework.beans.factory.BeanFactory接口定义的)是最简单的容器,提供DI最基本的支持。Application contextcom.springframework.context.ApplicationContext)是在bean factory基础上实现的,提供了系统框架的功能,比如,从一个properties文件中读取文本信息的能力等。

NOTE:这里的bean指的是POJOplain-old java object),不是web中的概念。

    下面看最基本的容器,BeanFactory

2.1.1 介绍BeanFactory

    跟名字的意思一样,一个bean factory是由factory模式生成的。就是说,一个负责创建和分配beans的类。尽管跟其他一些实现工厂模式的实现不同,它经常生成单例的对象,一个bean factory是为了生成的工厂,创建和销毁很多类型的beans

    一个bean factory除了简单生成对象和分配对象还有很多功能。因为bean factory知道应用程序内的很多对象,它能够在初始化是创建对象间的关系。它就把配置从bean的本身和bean的客户端处分离出来。结果是,bean factory交出对象,这些对象已经配置好了,知道了合作的对象,并且立即可以使用了。还有,bean factory还参与bean的生命周期,启动一些自定义的初始化和销毁。

BeanFactory有很多实现,在Spring用得最多的是org.springframework.bean.factory.xml.XmlBeanFactory,它能从xml配置文件中装载beans

为了创建一个XmlBeanFactory,你必须要想构造器传递一个org.springframework.core.io.Resource的实例。Resource对象向构造器提供xml文件。Spring提供了少数的Resource的实现,2.1

 

例如,下面的片段通过FileSystemResource读取xml文件来创建XmlBeanFactory

       BeanFactory factory = new XmlBeanFactory(new FileSystemResource(“beans.xml”));

       这行代码告诉bean factorybeans.xml文件中读取bean的定义。Beans就被动的加入到bean factory中了,意思是,bean factory会立即读取bean的定义(包括bean的描述和属性),bean的初始化是在当它们被需要的时候。

       bean factory中的到一个bean,,只需要调用getBean方法即可,参数是beanid

       MyBean bean = factory.getBean(“myBean”);

       调用getBean的时候,factory会实例化bean,并且通过DI把属性赋值进去。因此,一个beanSpring容器中的生命开始了。在 2.1.3 节中检查一个bean的声明周期。但先看另一个容器,application context

2.1.2 application context编程

       简单的程序使用bean factory就可以了,但为了使用Spring提供的更多功能,可以使用更好的容器实现,application context

       表面上,ApplicationContextBeanFactory一样,都是载入bean定义,捆绑它们,销毁。但ApplicationContext提供下面的

l         ApplicationContext提供了对i18n的支持

l         ApplicationContext提供了一般的属性资源的读取,比如图片

l         ApplicationContext给事件提供了监听器支持

因为这些额外的功能,ApplicationContextBeanFactory使用的更加广泛。只有在资源不足的时候再使用BeanFactory,比如手机设备。以后这本书都使用ApplicationContext

       ApplicationContext3个使用方式

l         ClassPathXmlApplicationContext-通过classpath来读取xml文件,把xml文件当作类资源

l         FileSystemXmlApplicationContext在文件系统里读取xml文件

l         XmlWebApplicationContextweb路径找xml文件

13章讲述XmlWebApplicationContext,那章介绍基于webSpring项目。现在只考虑用前两个。

第一个的用法:

ApplicationContext context = new FileSystemXmlApplicationContext(“c:/foo.xml”);

第二个很相似:

ClassPathXmlApplicationContext context = new ClasspathXmlApplicationContext(“foo.xml”);

不同点在于,第一个在指定路径中寻找xml文件,第二个在所有类路径中,包括jar中寻找xml文件。

这两个方法中,得到beanbean factory的方法一样,用getBean的方法。因为ApplicationContext接口继承与BeanFactory接口。

不管ApplicationContext提供的额外功能,另外一个很大的区别是一个单例bean的载入方式不同。Bean factorygenBean方法调用时载入,ApplicationContext有些智能,它在初始化就读入所有的单例Bean。这样,你可以保证在用到这些单例bean的时候就用,不用等待了。

上面是spring容器基础,下面看bean的生命周期。

2.1.3 bean的生命周期

       传统java程序中很简单。用new来创建,不需要时候通过自动垃圾收集销毁。相反,spring容器中的生命周期就比较详细了。因为这样,你可以使用spring在创建bean时提供的一些好处。

       2.2示例了一个bean通过BeanFactory生成的过程。表2.2解释了每步的含义。

ApplicationContext中的bean只跟BeanFactory中的有一点不同,下面是图:

唯一不同的是bean继承ApplicationContextAware接口,创建时会调用setApplicationContext方法会调用。

现在你知道如何创建和载入一个spring容器了,为了得到spring DI的一些有益之处,那么你必须把对象捆绑到spring容器上。下面看如何用xml来在spring中配置bean

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值