Guice 字段注入
Guice field injection
事情是这样的。我试图用 guice 注入一些字段,但事实证明它们总是空的(不试图在构造函数上使用它们)。
public class A {
@Inject
private SomeClass bar;
public A() {
foo();
}
public someMethod() {
bar.doSth();
}
}
public class B {
private A a;
public B() {
a = new A();
}
public someOtherMethod() {
a.someMethod();
}
}
现在,每当应用程序执行 someOtherMethod 并尝试 运行 bar.doSth 时,都会引发一个很好的 NullPointerException。
所以为了解决这个问题,我结束了在构造函数中手动注入字段:
public A() {
final Injector injector = Guice.createInjector();
bar = injector.getInstance(SomeClass.class);
}
但这很丑陋,不清楚,有很多样板,我不得不在很多地方做这件事,这很乏味。
还有其他方法可以存档吗?或者解释为什么没有注入该字段?
谢谢
注意:
我目前无法在构造函数(使用 bar 作为参数)上进行 propper 注入,因为它意味着重构。该项目目前正在大量生产中,因此目前无法进行此类重构。
IOC 容器只控制您告诉它控制的内容。它不知道 B
内部的 A
,因为它是直接构建的,而不是由容器管理的。您还需要 inject
A
:
public class B {
@inject private A a;
public B() {}
...
}
你也不能只调用 new B()
,你还需要注入 B
。
事情是这样的。我试图用 guice 注入一些字段,但事实证明它们总是空的(不试图在构造函数上使用它们)。
public class A {
@Inject
private SomeClass bar;
public A() {
foo();
}
public someMethod() {
bar.doSth();
}
}
public class B {
private A a;
public B() {
a = new A();
}
public someOtherMethod() {
a.someMethod();
}
}
现在,每当应用程序执行 someOtherMethod 并尝试 运行 bar.doSth 时,都会引发一个很好的 NullPointerException。
所以为了解决这个问题,我结束了在构造函数中手动注入字段:
public A() {
final Injector injector = Guice.createInjector();
bar = injector.getInstance(SomeClass.class);
}
但这很丑陋,不清楚,有很多样板,我不得不在很多地方做这件事,这很乏味。
还有其他方法可以存档吗?或者解释为什么没有注入该字段?
谢谢
注意: 我目前无法在构造函数(使用 bar 作为参数)上进行 propper 注入,因为它意味着重构。该项目目前正在大量生产中,因此目前无法进行此类重构。
IOC 容器只控制您告诉它控制的内容。它不知道 B
内部的 A
,因为它是直接构建的,而不是由容器管理的。您还需要 inject
A
:
public class B {
@inject private A a;
public B() {}
...
}
你也不能只调用 new B()
,你还需要注入 B
。