我正在使用 jersey 在不同位置注入 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);
...
}
});
Run Code Online (Sandbox Code Playgroud)
福工厂:
public class FooFactory implements Factory<Foo> {
@Override
public Foo provide() {
return Foo.newInstance();
}
}
Run Code Online (Sandbox Code Playgroud)
注入资源的工作原理:
@Path("/myresource")
public class MyResource{
@Inject
protected Bar instance;
}
Run Code Online (Sandbox Code Playgroud)
但
public class Foo {
@Inject
protected Bar instance;
}
Run Code Online (Sandbox Code Playgroud)
才不是。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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1081 次 |
| 最近记录: |