【发布时间】:2018-03-16 19:12:59
【问题描述】:
如何让 Jersey 注入类,而无需一对一地创建和注册工厂?
我有以下配置:
public class MyConfig extends ResourceConfig {
public MyConfig() {
register(new AbstractBinder() {
@Override
protected void configure() {
bindFactory(FooFactory.class).to(Foo.class);
bindFactory(BazFactory.class).to(Baz.class);
}
});
}
}
hk2 现在将成功注入 Foo 和 Baz:
// this works; Foo is created by the registered FooFactory and injected
@GET
@Path("test")
@Produces("application/json")
public Response getTest(@Context Foo foo) {
// code
}
但这不是我的目标。我的目标是注入包装这些类的对象。有很多,它们每个都消耗 Foo 和 Baz 的不同组合。一些例子:
public class FooExtender implements WrapperInterface {
public FooExtender(Foo foo) {
// code
}
}
public class FooBazExtender implements WrapperInterface {
public FooBazExtender(Foo foo, Baz baz) {
// code
}
}
public class TestExtender implements WrapperInterface {
public TestExtender(Foo foo) {
// code
}
// code
}
等等。
以下不起作用:
// this does not work
@GET
@Path("test")
@Produces("application/json")
public Response getTest(@Context TestExtender test) {
// code
}
我可以为每个创建一个工厂并将其注册到我的应用程序配置类中,使用 bindFactory 语法,就像我对 Foo 和 Baz 所做的那样。但这不是一个好方法,因为有问题的对象数量很多。
我已经阅读了很多 hk2 文档,并尝试了各种方法。我只是不太了解 hk2 的实际工作原理,无法得出答案,而且这似乎是一个足够常见的问题,应该有一个简单的解决方案。
【问题讨论】:
标签: java dependency-injection jersey hk2