您的位置:首页 > 产品设计 > 产品经理

Expert one on one J2EE development without EJB 摘要(3)

2008-10-23 15:44 351 查看
 
基础接口
在spring中,轻量级容器最基本的接口是BeanFactory。这是一个非常简单的接口,如果没有线程的bean工厂实现满足需求,就创建自己的实现。beanFactory接口提供了两个getBean()方法,它们都可以根据String类型的名称查找获取bean实例,两者的不通之处在于:其中一个getBean()方法允许使用者检查获得的bean是否具有所需的类型。如果类型不符合,会抛出一个beanNotOfRequiredTypeException.
 

 

 
 
使用者可以通过isSinglton()方法检查某个特性名称声明的bean被定义为Singleton还是Prototyoe。如果bean被定义为Singleton,所有对getBean()方法的调用将返回同一个对象实例的引用;如果bean被定义为Prototype,每次对getBean()的调用都将新建一个独立的对象实例。
 
beanFactory的大多数实现知道自己处于整个工厂体系的什么位置。如果当前的工厂中没有找到某个bean,就会向它的父工厂中查找,如果一级一级往上追查。 从调用者的角度看,工厂的层次是透明的,就好像只有一个工厂一样。父工厂中定义的bean可以在子工厂中使用,反过来不行。
 
BeanFactory接口及其子接口抛出的异常就继承了org.springframewor.beans.BeansException,因此它们都是unchecked异常。
意味着:底层容器中出现的配置问题通常是无法恢复的。如果愿意的话,应用开发人员可以选择编写代码以便从错误中恢复。但是,大多数情况下,这种构建的失败是致命的,根本无法恢复,因此也不应该强迫开发者写这些毫无价值的代码。
 
 
 
org.springframework.beans.factory.ListableBeanFactory子接口可以列出工厂中所有的bean。这个子接口提供了一系列方法,可以用于获得工厂中定义bean的数量、所有bean的名称、具有特定类型的所有bean的名称。
 

 
与beanFactory接口不同,ListableBeanFactory接口中的方法只可应用于当前的工厂实例,而不能进入工厂的层次体系。
 
Springbean工厂有很多用法:(1)能作为简单的bean配置管理 (2)用于集成j2ee资源 (3)用于生成AOP代理
应用对象很少需要之直接用到BeanFactory接口--它们通常都在工厂中配置、组装,不需要针对Spring编写任何特殊的代码。
 
如果只需要使用bean工厂,Spring发布包中提供了一个很小的spring-core.jar文件。
 
bean工厂是Spring的核心,也是Spring提供的诸多服务的基础。
 
借助标准的java.beans.PropertyEditor 机制,bean工厂可以自动的把String类型的值转换为适当的类型。能够使用这种标准的基础设施,就是用JavaBean方式装配的主要优势。
 
 
xml不是描述bean声明的唯一途径。bean工厂和bean声明的读取是分离的。bean声明的解析是在读取器中实现的,可以与任何bean工厂配合使用。
读取xml的读取器就是org.springframework.beans.factory.xml.XmlBeanDefinitionReader
 
访问bean组件
用xml声明装载一个bean工厂。
org.springframework.beans.factory.xml.XmlBeanFactory

 
这里用到的Resource接口(
org.springframework.core.io.Resource
)可以针对任何资源实现,只要这种资源能够以某种形式提供java.io.InputStream对象即可。Spring为各种资源提供了实现,包括ClassPath资源到ServletContext资源。
 
更通用的一种方式:
org.springframework.beans.factory.support.DefaultListableBeanFactory 与org.springframework.beans.factory.xml.XmlBeanDefinitionReader配合使用。

 
通用的机制。将BeanFactory对象的引用保存在某个地方,其中管理的Singleton创建的开销可能相当大。一些典型的存放这样一个工厂的引用,如Applet实例变量、ejb实例变量或者ServletContext中的属性。还可以自制一个应用启动时即创建的Singleton对象,用于保存这个工厂引用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息