HK2 / Jersey 不注入非资源 class
HK2 / Jersey does not Inject into non Resource class
我正在使用球衣在不同位置注入 POJO。这是我的配置:
register(new AbstractBinder() {
@Override
protected void configure() {
bind(Bar.class).to(Bar.class).in(Singleton.class);
bindFactory(FooFactory.class).to(Foo.class).in(Singleton.class);
...
}
});
FooFactory:
public class FooFactory implements Factory<Foo> {
@Override
public Foo provide() {
return Foo.newInstance();
}
}
注入资源有效:
@Path("/myresource")
public class MyResource{
@Inject
protected Bar instance;
}
但是
public class Foo {
@Inject
protected Bar instance;
}
没有。 Foo.instance
为空。为什么?以及如何让它发挥作用?
您的工厂正在创建 Foo,因此 DI 框架将不再尝试注入。您需要让 DI 框架创建 Foo 的实例或自己在 FooFactory 中处理注入。
例如,您的 FooFactory 可以有一个 Bar 字段,它用它来初始化 Foo...
public class FooFactory implements Factory<Foo> {
private final Bar theBar;
@Inject
public FooFactory(Bar bar) {
theBar = bar;
}
@Override
public Foo provide() {
return Foo.newInstance(bar);
}
}
我正在使用球衣在不同位置注入 POJO。这是我的配置:
register(new AbstractBinder() {
@Override
protected void configure() {
bind(Bar.class).to(Bar.class).in(Singleton.class);
bindFactory(FooFactory.class).to(Foo.class).in(Singleton.class);
...
}
});
FooFactory:
public class FooFactory implements Factory<Foo> {
@Override
public Foo provide() {
return Foo.newInstance();
}
}
注入资源有效:
@Path("/myresource")
public class MyResource{
@Inject
protected Bar instance;
}
但是
public class Foo {
@Inject
protected Bar instance;
}
没有。 Foo.instance
为空。为什么?以及如何让它发挥作用?
您的工厂正在创建 Foo,因此 DI 框架将不再尝试注入。您需要让 DI 框架创建 Foo 的实例或自己在 FooFactory 中处理注入。
例如,您的 FooFactory 可以有一个 Bar 字段,它用它来初始化 Foo...
public class FooFactory implements Factory<Foo> {
private final Bar theBar;
@Inject
public FooFactory(Bar bar) {
theBar = bar;
}
@Override
public Foo provide() {
return Foo.newInstance(bar);
}
}