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

来源:互联网 发布:mac上好用的板绘软件 编辑:程序博客网 时间:2024/05/18 11:28

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代码  收藏代码
  1.     
  2. public interface BeanFactory {  
  3.   
  4.     Object getBean(String name) throws BeansException;  
  5.     Object getBean(String name, Class requiredType) throws BeansException;  
  6.   
  7.     boolean containsBean(String name);  
  8.   
  9.     boolean isSingleton(String name) throws NoSuchBeanDefinitionException;  
  10.   
  11.     String[] getAliases(String name) throws NoSuchBeanDefinitionException;  
  12.   
  13. }  

这就是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容器的实例化非常简单,如下面的例子:

Resource resource = new FileSystemResource("beans.xml");BeanFactory factory = new XmlBeanFactory(resource);

... 或...

ClassPathResource resource = new ClassPathResource("beans.xml");BeanFactory factory = new XmlBeanFactory(resource);

... 或...

ApplicationContext context = new ClassPathXmlApplicationContext(             new String[] {"applicationContext.xml", "applicationContext-part2.xml"});// of course, an ApplicationContext is just a BeanFactoryBeanFactory factory = (BeanFactory) context;


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