读书人

Spring学习- BeanFactory(核心)

发布时间: 2012-08-13 13:21:53 作者: rapoo

Spring学习----- BeanFactory(核心)

Spring 作为一种IOC容器最大的目的就是降低组件与组件之间的依赖关系。而BeanFactory作为整个Spring IOC容器的核心,使用了一种统一的方法来装配所有的应用对象,通过Java的反射机制和依赖注入(Dependency Injection)来实现这一装配过程,使受之管理的对象无需知道Spring的存在(受管对象甚至不用import 任何Spring的class),同时也降低了组件间的依赖程度,同时受管对象的生命周期由BeanFactory来统一管理,开发者就不用实现大量的自制的工厂Singleton。


在Spring中,BeanFactory是IoC容器的核心接口。它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖.BeanFactory提供了配制框架及基本功能,而ApplicationContext则增加了更多支持企业核心内容的功能。ApplicationContext完全由BeanFactory扩展而来,因而BeanFactory所具备的能力和行为也适用于ApplicationContext。ApplicationContext继承BeanFactory

注:以下那些受Spring IOC容器即BeanFactory控制管理的对象简称bean对象

一. BeanFactory

作为整个Spring IOC容器核心Interface BeanFacotry被放在包 org.springframework.beans.factory中,这是一个非常简单的接口,如果Spring现有的BeanFactory的实现无法满足你的要求(这种情况应该不多J),你可以很容易创建自己的一个实现。

Java代码 Spring学习- BeanFactory(核心)
  1. public interface BeanFactory {
  2. Object getBean(String name) throws BeansException;
  3. Object getBean(String name, Class requiredType) throws BeansException;
  4. boolean containsBean(String name);
  5. boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
  6. String[] getAliases(String name) throws NoSuchBeanDefinitionException;
  7. }

这就是BeanFactory的代码,总共有5个函数所组成,2个getBean函数提供根据String类型的名称来寻找受BeanFactory的bean对象,区别在于其中一个函数提供了类型检测的功能,来检测取得bean对象是否为所需的类型,如果类型不符将抛出一个BeanNotOfRequiredTypeException的异常。

函数isSingleton 则用来判断BeanFactory的bean对象被定义为Singleton还是Prototype。如果被定义为Singleton的话,在BeanFactory的生命周期内,所有对getBean的调用将返回一个bean对象的实例引用,如果是Prototype则每次调用getBean对会创建一个独立的对象实例。

如果一个bean对象被定义了别名,那么函数getAliases就可以用来取得该bean对象的所有别名。

Spring IoC容器的实例化非常简单,如下面的例子:

// of course, an ApplicationContext is just a BeanFactoryBeanFactory factory = (BeanFactory) context;


转自:http://ivorytower.iteye.com/blog/183403


读书人网 >软件架构设计

热点推荐