假设我Closeable
使用请求范围通过Guice注入了一个对象:
@Provides @RequestScoped
public MyCloseableResource providesMyCloseableResource(){
return new MyCloseableResourceImpl();
}
Run Code Online (Sandbox Code Playgroud)
是否有可能连接一个清理方法,该方法close()
在范围存在时自动调用我的资源,而不需要求助于自定义范围实现?
查看Guice wiki上的自定义范围实现指南,它显示应该创建和清理范围,如下所示:
/**
* Runs {@code runnable} in batch scope.
*/
public void scopeRunnable(Runnable runnable) {
scope.enter();
try {
// explicitly seed some seed objects...
scope.seed(Key.get(SomeObject.class), someObject);
// create and access scoped objects
runnable.run();
} finally {
scope.exit();
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有办法finally
在内置范围(特别是会话和请求范围)中连接一些自定义清理代码.
如果不可能,可能会出现阻碍这种自动清理的问题吗?
我已经找到了在servlet容器中实现相同效果的方法,通过实现Filter来为每个请求创建和清理资源,这很有效,但我很好奇它是否可能与纯Guice一起使用.