实际问题
我正在尝试使用 Jersey 2.0 创建一个简单的 JAX-RS Application
,如下所示:
@ApplicationPath("")
public class MyService extends ResourceConfig {
public MyService() {
packages(MyService.class.getPackage().getName());
register(new ApplicationBinder());
}
private static class ApplicationBinder extends AbstractBinder {
@Override
protected void configure() {
MyDependency dep = new MyDependency();
bind(dep).to(MyDependency.class);
// TODO properly shutdown/destroy/dispose "dep" somewhere
}
}
}
MyDependency
对象的创建成本有点高,它们有一个 shutdown()
方法,需要在销毁前调用该方法。我应该在哪里以及如何使用 JAX-RS 执行此类清理任务?
更多背景(如果需要)
使用创建的 MyDependency
对象的 JAX-RS 资源实现看起来像这样——如果这与问题有任何关联的话:
@Path("getit")
@Singleton
public class MyResource {
private final MyDependency dependency;
@Inject
public MyResource(MyDependency dependency) {
this.dependency = dependency;
}
@GET
@Produces(MediaType.TEXT_HTML)
public String getIt() {
return this.dependency.getIt();
}
}
最佳答案
Servlet 3.0 兼容容器 意味着您不能依赖可用的 CDI,因此我们对 hk2 感到震惊。
在 MyDependency
上实现 org.glassfish.hk2.api.PreDestroy
应该指示绑定(bind)框架进行适当的清理。
在关闭时,hk2 应该调用接口(interface)定义的 preDestroy()
方法。
关于dependency-injection - JAX-RS:使用关闭/销毁/处置的依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17656414/