fudoctor / Core / Spring中的bean和BeanFactory

分享

   

Spring中的bean和BeanFactory

2012-11-28  fudoctor

 Spring中的bean和BeanFactory

分类: Java框架488人阅读

综述

(1)Spring通过BeanFactory灵活配置、管理bean,Spring对管理的bean没有任何特别的要求,完全支持对POJO的管理;

(2)BeanFactory有个ApplicationContext子接口,该接口比BeanFactory增强了更多的功能,该接口的实例有时被称为Spring的上下文,在通常的J2EE应用中,都应该考虑ApplicationContext接口,只有在J2EE应用非常关注内存的情况下,才考虑使用BeanFactory

(3)Spring以bean方式管理组件,J2EE的全部组件都被当做bean来管理,Spring中的组件可以是Java对象或者Java组件;

(4)在Spring整个应用中,各层的对象都处在Spring的管理下,这些对象以Bean的方式存在,Spring负责创建bean,并且管理其生命周期,bean在Spring容器中运行,无需感受Spring容器的存在,一样可以运行,接受Spring的依赖注入,包括bean的属性注入,合作者注入,依赖关系注入等

很关键的一点:Spring上下文(ApplicationContext)是产生bean的工厂,bean是工厂产生的实例,产生bean的实例时,需要知道bean的实现类,bean实例的使用者(即调用程序)面向的是接口,无需关心bean实例的实现类,Spring工厂(ApplicationContext)负责维护bean实例的实例化,使用者无需关心实例化。

1.定义和实例化

a.综述

(1)bean通过XML文件定义;

(2)Spring提供bean的实例化,以及依赖注入;

(3)bean实例通过BeanFactory进行访问

b.BeanFactory接口

BeanFactroy是一个Spring容器,用于创建,配置,管理bean,bean之间的依赖关系也有BeanFactory负责维护;

BeanFactory对bean的实例化过程,无须bean的调用者关心,调用者只需要通过getBean()方法获得指定bean的引用;

创建BeanFactory的实例时,必须提供bean的详细配置信息,bean的详细信息通过XML文件描述,创建BeanFactory实例时,需要提供XML文件作为参数

1.1 bean的定义

a)bean的定义必须包含两个属性

(1)id:确定bean的唯一标识符

(2)class指定该bean的具体实现类,而不是接口,通常情况下,Spring会直接使用new关键字创建该bean的实例,因此,必须提供bean的是实现类;

b)bean的基本行为

bean在Spring中有两种基本行为

Singleton和non-singleton

Singleton:整个Spring容器中只有一个该bean的实例存在,每次请求该id的bean,Spring都会返回该bean的共享实例;

non-singleton:每次请求该id的bean,Spring都会新建一个bean实例,然后返回给程序,通常,要求Web应用的控制bean通常被设置为non-singleton,因为每次HttpServletRequest都需要系统启动一个新Action来处理用户请求;

提倡使用non-singleton类型的bean,应为Spring容器创建或者销毁bean都会有一定的开销。

c)Spring中的bean VS. JavaBean

(1)JavaBean中的每个属性需要有getter和setter方法,JavaBean通常作为model,用来封装值对象,在各层之间传递(结合JSP设计模式中的MVC结构中,m:JavaBean,v:JSP,c:Servlet理解);

(2)Spring中的bean应该满足

a.每个bean实现类都应该提供无参数的构造器;

b.采用构造注入时,应提供对应的构造函数;

c.采用设值注入时,应提供对应的setter方法;

(3)真正的差异

a.用处:JavaBean作为值对象传递参数,而Spring中任何组件都可以被称为bean;

b.写法:JavaBean作为值对象,每个属性都要提供setter和getter方法,而bean只需要为接受设值注入的属性提供setter方法;

c.生命周期:JavaBean作为值对象传递,不接受任何容器管理其生命周期,bean的生命周期由Spring管理。

1.2bean的实例化

三种方法进行bean的实例化

a.调用构造器new一个bean实例

b.BeanFactory调用某个工厂类的静态工厂方法创建bean

c.BeanFactory调用实例工厂方法创建bean

(1)调用构造器new一个Bean实例

a.对于采用设值注入的bean,提供无参数的构造器,BeanFactory通过调用该构造器创建bean的实例,但没有为它注入属性值和依赖关系,通过默认的构造函数实例化该bean;

b.BeanFactory创建bean的实例后,根据配置文件决定依赖关系,最后将一个完整的bean返回给程序;

c.创建BeanFactory实例->BeanFactory实例通过调用默认构造器创建Bean的实例,并设置为默认值->BeanFactory根据定义文件对Bean进行依赖注入->返回一个JavaBean实例

(2)调用工厂类的静态工厂方法创建bean

a.class属性确定静态工厂类,而非bean的实现类,使用factory-method属性确定创建bean实例的方法名,如果方法需要参数,通过<constructor-arg>确定

(3)调用实例工厂方法创建bean

依赖注入的属性,均由property元素确定参数值。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。

    来自: fudoctor > 《Core》

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多
    喜欢该文的人也喜欢 更多

    ×
    ×

    ¥.00

    微信或支付宝扫码支付:

    开通即同意《个图VIP服务协议》

    全部>>