泽西岛 - 是否有一种方法可以实例化使用参数的每次重新收回资源



假设我有这个类:

@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));

,但问题在于方法是一个单一的测试实例。我想根据请求进行实例。因此,泽西岛有一种方法:

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

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

最重要的是,我使用的是dropwizard,这也不能让我访问ResourceConfig中的所有方法(但是我检查了其文档,没有找到任何让我传递参数的方法)

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

谢谢!

ps:我知道我可以使用Spring或Guice(或我自己的实例提供商)并注入我的课程,但我不想这样做(当然,如果这是唯一的话,我会这样做方式)

正如@peeskillet所提到的那样,泽西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);

最新更新