Spring具有生命周期管理的功能,例子如下:
一个示例Bean的定义如下:
public class ExampleBean {
public void init() {
// do some initialization work
}
public void cleanup() {
// do some destruction work (like closing connection)
}
}
则可以在配置文件中定义Bean如下:
<bean id="exampleInitBean" class="examples.ExampleBean" init-method="init" destroy-method="cleanup"/>
这样在Spring会调用init方法初始化exampleInitBean,在Spring销毁的时候会调用cleanup销毁exampleInitBean。
Bean之间可能存在依赖关系,假定A依赖于B,那么初始化正确的顺序是先初始化B,再初始化A,而在销毁时则按照相反的顺序,
先销毁A,再销毁B。
然而,Spring通过依赖检测可以实现正确的初始化顺序,但是在销毁时顺序就不能保证了(粗略看了一下代码,Spring是按照
Hash表的顺序销毁Bean的,而Hash表是不能保证顺序的),这可能会导致抛出异常。这应该是Spring的一个缺陷吧。
一个示例Bean的定义如下:
public class ExampleBean {
public void init() {
// do some initialization work
}
public void cleanup() {
// do some destruction work (like closing connection)
}
}
则可以在配置文件中定义Bean如下:
<bean id="exampleInitBean" class="examples.ExampleBean" init-method="init" destroy-method="cleanup"/>
这样在Spring会调用init方法初始化exampleInitBean,在Spring销毁的时候会调用cleanup销毁exampleInitBean。
Bean之间可能存在依赖关系,假定A依赖于B,那么初始化正确的顺序是先初始化B,再初始化A,而在销毁时则按照相反的顺序,
先销毁A,再销毁B。
然而,Spring通过依赖检测可以实现正确的初始化顺序,但是在销毁时顺序就不能保证了(粗略看了一下代码,Spring是按照
Hash表的顺序销毁Bean的,而Hash表是不能保证顺序的),这可能会导致抛出异常。这应该是Spring的一个缺陷吧。