JAX-RS:关闭/销毁/处置的依赖注入

时间:2013-07-15 14:16:11

标签: dependency-injection jax-rs jersey-2.0

实际问题

我正在尝试使用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();
  }

}

1 个答案:

答案 0 :(得分:1)

与Servlet 3.0兼容的容器意味着您无法依赖CDI,因此我们对hk2感到震惊。

org.glassfish.hk2.api.PreDestroy上实现MyDependency应该指示绑定框架进行适当的清理。

在关机时,hk2应该调用接口定义的preDestroy()方法。