dependency-injection - JAX-RS:使用关闭/销毁/处置的依赖注入(inject)

标签 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();
  }

}

最佳答案

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/

相关文章:

java - 如何从 ResponseEntity 中提取对象列表?

java - 一个普通的 servlet 可以被配置为一个 seam 组件吗?

angular - NullInjectorError : StaticInjectorError(AppModule)[Component-> MatDialogRef]

java - 将多部分功能添加到 Tomcat 中的 Jersey Web 服务

jersey - 对 OAuth2 库与 Jersey 集成的建议?

tomcat - 我的 JUnit 测试如何找到我的 Tomcat 数据源?

c# - 通过构造函数依赖注入(inject)打破循环依赖

java - 框架中的应用程序特定注入(inject)

java - 如何正确中断 JAX-RS AJAX 请求

rest - 如何使用属性文件设置 jersey 和 swagger-ui 以设置 url 变量?