论坛首页 Java企业应用论坛

Bean和BeanFactory

浏览 2404 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-06-07  
Bean是Spring管理的基本单位,在Spring的J2EE应用中,所有的组件都是bean,bean包括数据源、Hibernate的SessionFactory及事务管理器等。Spring里的bean是非常广义的概念,任何的Java对象,Java组件都可别当成bean处理。

BeanFactory-->Spring容器最基本的接口。BeanFactory负责配置、创建及管理bean,以及bean与bean之间的依赖关系。
BeanFactory接口包含如下的基本方法:
Boolean containsBean(String name):
判断Spring容器是否包含id为name的bean定义。
Object getBean(String name):
返回容器id为name的bean.
Object getBean(String name, Class requiredType):
返回容器中id为name,并且类型为requiredType的bean.
Class getType(String name):
返回容器中id为name的bean的类型.

Bean的基本定义:
通常必须的两个属性:
1 id
2 class
很显然bean的实例化可以通过BeanFactory的getBean()方法得到.
在Spring1.2中,bean在Spring的容器中有两种基本类型:
1singleton:单态
2not-singleton或prototype:原型
每次请求id为not-singleton类型的bean时,Spring都会新建一个bean实例,然后返回给程序.通常要求将Web应用的控制器bean配置成non-singleton类型。因为,每次HttpServletRequest都需要系统启动一个新Action来处理用户请求。如果不指定bean的基本行为,Spring默认使用singleton类型,non-singleton类型的bean的创建、销毁代价比较大,而singleton类型的bean实例成功后,可以重复使用,因此,建议应尽量避免将bean设置成为non-singleton类型。

创建bean的实例通常有以下方法:
1 调用构造器创建一个bean实例
通过"new"关键字创建bean实例
2 BeanFactory调用某个类的静态工厂方法创建bean
使用静态工厂创建bean实例时,class属性也是必需的,但此时class属性并不是该实例的实现类,而是静态工厂类。由于Spring需要知道由哪个静态工厂方法来创建bean实例,因此使用factory-method属性来确定静态工厂方法名。
3 BeanFactory调用实例工厂方法创建bean
实例工厂方法必须提供工厂实例,因此必须在配置文件中配置工厂实例,而bean元素无需class属性,因为BeanFactory不再直接实例化该bean,仅仅是执行工厂的方法,负责生成bean实例.


实例工厂方法和静态工厂方法用法基本相似,我们来看看它门的区别和相同点:

区别:
1 调用实例工厂方法创建bean时,必须将实例工厂配置成bean实例,而静态工 厂方法则无须配置工厂bean.
2 调用实例工厂方法创建bean时,必须使用factory-bean属性来确定工厂bean, 而静态工厂方法则使用class元素确定静态工厂类.
相同点:
1 都需使用factory-method属性指定产生bean实例的工厂方法
2 工厂方法需要参数,都使用construtor-arg属性确定参数值
3 其他依赖注入属性,都使用property元素确定参数值
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics