假设我有这门课程:
<td>
<textArea data-bind="value: $data.Notes"></textArea>
</td>
然后,我想在泽西岛注册。人们会这样做:
@Path("/test")
public class TestResource{
private TestService testService;
public TestResource(TestService testService){
this.testService = testService;
}
@GET
public String getMessage(){
return testService.getMessage();
}
}
但问题是该方法构成了TestResource的单个实例。我想根据请求创建一个实例。所以,泽西有一种方法可以做到这一点:
TestService testService = new TestServiceImpl();
resourceConfig.register(new TestResource(testService));
太棒了!但它不允许我将实例化参数传递给它的构造函数。
除此之外,我正在使用DropWizard,它也不允许我访问ResourceConfig中的所有方法(但我检查了它的文档,但没有找到任何让我传递参数的方法)
所以我想知道是否有办法实现这一目标。
谢谢!
PS:我知道我可以使用Spring或Guice(或我自己的实例提供程序)并注入我的类来逃避这一点,但我不想这样做(当然,如果它是唯一的话,我会这样做方式)答案 0 :(得分:1)
正如@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);