Java 泽西岛2号需要清理资源
我有一个在其构造函数中创建对象的单例资源,当应用程序关闭,服务器终止时,我需要释放这些对象。泽西岛2号是怎么做到的Java 泽西岛2号需要清理资源,java,jersey-2.0,Java,Jersey 2.0,我有一个在其构造函数中创建对象的单例资源,当应用程序关闭,服务器终止时,我需要释放这些对象。泽西岛2号是怎么做到的 @Path("/") @Singleton public class MyResource { private Map<String, MyObject> cache; public MyResource() { cache = new ConcurrentHashMap<>(); // at some po
@Path("/")
@Singleton
public class MyResource {
private Map<String, MyObject> cache;
public MyResource() {
cache = new ConcurrentHashMap<>();
// at some point I need to remove all entries
// from the map and close all MyObject objects there
//
// the reason is because MyObject might have files open
// and I need to close the files
//
// where can I do that?
}
...
}
@Path(“/”)
@独生子女
公共类MyResource{
私有地图缓存;
公共资源(){
cache=新的ConcurrentHashMap();
//在某个时候,我需要删除所有条目
//从贴图中选择并关闭此处的所有MyObject对象
//
//原因是MyObject可能已打开文件
//我需要关闭这些文件
//
//我在哪里可以这样做?
}
...
}
球衣支持@PreDestroy
生命周期挂钩。因此,只需在类中用@PreDestroy
注释一个方法,Jersey将在释放资源之前调用它
import javax.annotation.PreDestroy;
@Path("/")
@Singleton
public class MyResource {
private Map<String, MyObject> cache;
public MyResource() {
}
@PreDestroy
public void preDestroy() {
// do cleanup
}
}
import javax.annotation.PreDestroy;
@路径(“/”)
@独生子女
公共类MyResource{
私有地图缓存;
公共资源(){
}
@发情前期
公共空间发情前(){
//清理
}
}
您需要更具体地说明“在某个时候”。在哪一点?容器管理生命周期的全部要点是,这些点被定义并成为配置项。手动调用“立即释放/清除这些”方法完全滥用了整个想法。谢谢。我将编辑这个问题。(另外,一般来说,您可能不希望容器管理的生命周期打开/关闭文件。这不是CDI的用途。)我是Java开发新手,请您提供更多关于您所谈论内容的信息?