我有自己的豆子:
@Bean
public MyBean myBean(){...
按照spring文档发布自己的资源,我应该指定destroyMethod
。如果没有直接指定destroyMethod
,我还没有找到弹簧调用的默认destroy方法。
我用过
@Bean(destroyMethod = "close")
public MyBean myBean(){...
但是如果它默认具有值,可以考虑不直接指定destroy方法。
春天是否会默认尝试destroy
,close
,release
?
如果spring默认尝试一些方法来释放资源 - 哪些?
答案 0 :(得分:24)
如Bean.destroyMethod
中所述:
为方便用户,容器将尝试推断a 针对从
@Bean
方法返回的对象的destroy方法。对于 给定一个@Bean
方法返回Apache Commons DBCPBasicDataSource
,容器会注意到close()
方法 在该对象上可用并自动将其注册为destroyMethod
。这种破坏方法推断'目前有限 仅检测名为“关闭”的公共,非参数方法。或者'关闭'。
换句话说,如果您没有指定destroyMethod
,但bean有公共close()
或shutdown()
方法,它将自动用作destroy-method
要停用此推理,请使用@Bean(destroyMethod = "")
。
答案 1 :(得分:6)
org.springframework.beans.factory.DisposableBean接口指定一个方法 -
void destroy() throws Exception;
简单地实施 -
public class ExampleBean implements DisposableBean {
public void destroy() {
// do some destruction work
}
}
用于基于XML的配置
<bean id = "exampleBean" class = "examples.ExampleBean" destroy-method = "destroy"/>
并在bean中
public class ExampleBean {
public void destroy() {
// do some destruction work
}
}
或使用@PreDestroy注释
答案 2 :(得分:5)
您可以实现一个方法,该方法将在使用@PreDestroy
@PreDestroy
public void methodName() {
//Your code..
}
答案 3 :(得分:2)
您可以延长DisposableBeanAdapter
课程。它提供的方法之一是Spring调用的destroy
方法。这样,当您使用DisposableBean
界面时,您无需提供任何实施。