春天框架中有@PreDestroy
之类的东西吗?
答案 0 :(得分:15)
如果定义了一个实现DisposableBean接口的bean,那么Spring将调用
void destroy() throws Exception;
在删除bean之前的方法。
这是一种方式,另一种方式是你的bean不必实现给定的接口。 在你的一个ConfigurationSupport类中,你的bean必须被定义为带有@Bean注释的pulic方法。
@Bean (destroyMethod="yourDestroyMethod")
public YourBean yourBean() {
YourBean yourBean = new YourBean();
return yourBean;
}
必须在YourBean.class中定义“yourDestroyMethod”方法,然后Spring会在销毁bean之前调用它。
有关详细信息,请参阅Spring文档:Destruction callbacks
<强>更新强>
第三种方式...... 我甚至会说更好的方法是指定bean的“init-method”和“destroy-method”......就像这样:{{3 }}
这解决了第三方依赖bean的问题,并解放了代码不必要的Spring接口..
答案 1 :(得分:6)
有三种方法可以做到。
@PreDestroy标签
xml中的destroy-method
如上所述的DisposableBean接口
我的faivorite是@PreDestroy方法。
为此你需要:
在application-context.xml中添加以下架构:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<bean id="shutDownBean" class="spring.ShutDownBean" />
<context:annotation-config/>
</beans>
使 @PreDestroy 和 @PostDestroy 标签可用。 现在假设你有一个ShutDownBean,你想在调用shutdown回调时运行一些代码。 注册bean。
import javax.annotation.PreDestroy;
public final class ShutDownBean {
@PreDestroy
public static void shutDownMethod() {
System.out.println("Shutting down!");
}
}
现在你完成了。
如果您有桌面应用程序,那么要使用@PreDestroy注释,您需要将其关闭,如下所示:
AbstractApplicationContext applicationContext =
new ClassPathXmlApplicationContext("application-context.xml");
applicationContext.registerShutdownHook();
请注意: AbstractApplicationContext 具有 registerShutdownHook()的实现,因此这是您可以使用的最小类。
此外,如果您可以对类使用 destroy-method 标记,则无法控制其实现。例如,您可以在applcation-context.xml中添加它:
<bean id = "dataSource"
class = "org.apache.commons.dbcp.BasicDataSrouce"
destroy-method = "close">
destroy-method值可以具有任何可见性,但不需要参数。
希望这有帮助!
答案 2 :(得分:3)
您的意思是使用标准JDK @PreDestroy
注释方法吗?这在Spring中很常见,通常比在XML中使用bean声明上的destroy-method
属性更好。您所要做的就是包括
<context:annotation-config/>
在配置文件中,Spring处理剩下的工作。
答案 3 :(得分:0)
有标准的.NET IDisposable.Dispose()
方法。我不知道Spring,但是通过快速的谷歌搜索,似乎@predestroy几乎是相同的概念。