入门 07 - Bean生命周期


 在Spring中,从BeanFactory取得的实例为Singleton,预设是每一个别名维持一个实例,对单执行绪的程序来说并不会有什么问题,但对于多执行绪的程序,您必须注意到执行绪安全,您也可以设定每次从BeanFactory取得 Bean时,都产生一个新的实例,例如:

<bean id="helloBean" class="onlyfun.caterpillar.HelloBean" singleton="false">


 singleton预设是true,藉由将其设定为false,每次取得Bean时都会产生一个新的实例。
 BeanFactory 负责Bean的生命周期,包括Bean的生成与销毁、Bean的创建方式(是否为singleton)、Bean的属性设定、依赖关联的建立等。如果您要在Bean的生命周期的某个阶段作一些事情,可以有几个方式,第一个方式是实作Spring所提供的相关接口,透过实作 org.springframework.beans.factory.InitializingBean、 org.springframework.beans.factory.DisposableBean,您可以在Bean创建与销毁时作一些事情:

public interface InitializingBean {

    void afterPropertiesSet() throws Exception;

}

 

public interface DisposableBean {

    void destroy() throws Exception;

}


 实作接口使得Spring的特定接口侵入Bean的实作中,这并不是个很好的作法,考虑到Bean的可移植性,您可以考虑统一Bean的初始化与销毁方法,并在Bean定义档中宣告在初始化或销毁Bean时使用这些方法:

<bean id="helloBean" class="onlyfun.caterpillar.HelloBean"

                           init-method="init"

                           destroy-method="destroy">


 在实作Bean时,只要加入这些方法即可,例如:

public class HelloBean {

    public void init() {

        ....

    }  

  

    ....

  

    public void destroy() {

        ....

    }

}


 这样作的好处是可以不引入任何Spring特定的接口,使得Bean可以轻易的从Spring框架中脱离,只要您所采用的另一个框架可以支持您所自订的初始化与销毁方法,Bean就不用任何的修改,然而这个方法事实上还是依赖于容器,容器必须有呼叫这些方法的能力,只是 这些方法的名称可以由我们自行决定,而不用实现特定的接口。
 除了上面两种方式,您还可以在Bean的建构函式或setter中作一些类似的初始化动作,这可以使得Bean不依赖于特定接口或容器功能,然而销毁时的动作就比较麻烦,因为finalize()执行的时间是由GC决定的,您只能在当中放一些不是实时性需求的销毁相关动作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值