我正在使用运动衫在各个地方注射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
为空。为什么?以及如何使其发挥作用?
答案 0 :(得分:4)
您的工厂正在创建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);
}
}