【发布时间】:2013-07-15 14:16:11
【问题描述】:
实际问题
我正在尝试使用 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();
}
}
【问题讨论】:
-
什么时候需要处理
MyDependency?另外,您使用的是 JavaEE 7 应用服务器(即 Glassfish)吗? -
@CarloPellegrini
MyDependency需要在 servlet 为 destroyed 时正确关闭。我的目标是任何与 Servlet 3.0 兼容的容器,理想情况下无需编写web.xml文件(因此有@ApplicationPath注释)。
标签: dependency-injection jax-rs jersey-2.0