Jersey – 有没有办法用参数实例化Per-Request资源?

假设我有这个课程:

@Path("/test") public class TestResource{ private TestService testService; public TestResource(TestService testService){ this.testService = testService; } @GET public String getMessage(){ return testService.getMessage(); } } 

然后,我想在泽西岛注册。 一个会这样做:

  TestService testService = new TestServiceImpl(); resourceConfig.register(new TestResource(testService)); 

但问题是该方法构成了TestResource的单个实例。 我想根据请求创建一个实例。 所以,泽西有一种方法可以做到这一点:

  TestService = new TestServiceImpl(); resourceConfig.register(TestResource.class); 

那样太好了! 但它不允许我将实例化参数传递给它的构造函数。

最重要的是,我正在使用DropWizard,它也不允许我从ResourceConfig访问所有方法(但我检查了它的文档,但没有找到任何让我传递参数的方法)

所以我想知道是否有办法实现这一目标。

谢谢!

PS:我知道我可以使用Spring或Guice(或我自己的实例提供程序)并注入我的类来逃避这一点,但我不想这样做(当然,如果这是唯一的方法我会这样做)

正如@peeskillet所提到的,jersey 2.x与HK2紧密结合,似乎这是将服务传递给它的唯一方式。

 @Singleton @Path("/test") public class TestResource { private TestService testService; @Inject public TestResource(TestService testService){ this.testService = testService; } @GET public String getMessage(){ return testService.getMessage(); } } 

这就是你注册的方式:

 environment.jersey().register(new AbstractBinder(){ @Override protected void configure() { bind(TestServiceImpl.class).to(TestService.class); // or bind(new TestServiceImpl()).to(TestService.class); }); environment.jersey().register(TestResource.class);