Spring中的bean和BeanFactory

  综述

  (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

   

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值