从书上可知,Spring框架中Bean对象有它的生命周期,还包括Bean的销毁。在BeanFacotory中获取的实例是Singleton,BeanFactory默认每一个引用来维护一个实例,对单执行程序来讲,并不会有什么问题,但是多程序来说,就需要你注意执行的安全,可以设置每次在BeanFacotry中获取Bean时,都产生一个新的实例。
for example:
<bean id="helloBean" class="com.baidu.HelloBean" singleton="false">
singleton默认值是true,意思是,每次都是共享一个实例,但是如果你要换成了false,每次都会产生一个新的实例。
从上一小结也曾经说过,BeanFactory负责Bean的生命周期,包括Bean的创建与销毁,Bean的创建方式是否为singleton,
Bean的属性设定,依赖关系的关联等。还可以在Bean的生命周期的某个阶段做一些事情,可以有几种方式。
第一种:通过Spring框架中提供的org.springframework.beans.factory.InitializingBean,和org.springframework
.beans.factory.DisposableBean,在创建或销毁的时候做一些事情。(书上描述说这种方式会导致Bean的可以移植性)
第二种:在创建HelloBean同时创建两个方法,用来当创建该bean或销毁该bean对象时候做某些事情.代码如下:
public class HelloBean {
public void init() {
....
}
....
public void destroy() {
....
}
}
applicationContext.xml
<bean id="helloBean" class="com.baidu.HelloBean"
init-method="init"
destroy-method="destroy">
</bean>
这样做的好处就是不用引入spring框架中的类,就可以让Bean对象轻松的从Spring框架中解脱出来。
然而这种方法还是依赖于Spring的容器,容器必须要有调用这个方法的能力。知识一些方法的名可以由自己去决定。
除了两种方式之外,其实还可以在Bean对象创建的setter方法中做一些事情,可以让Bean不依赖容器或特定的类.但是销毁时的调用就很麻烦,因为finalize()执行的时间是由Gc决定。