[英]Guice field injection
這就是問題。 我試圖用guice注入一些字段,但事實證明它們始終為null(不嘗試在構造函數上使用它們)。
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);
}
但這很丑陋,不清楚,有很多樣板,我被迫在很多地方做起來很單調。
還有其他存檔方法嗎? 或解釋為什么不注入該字段?
謝謝
注意:由於無法進行重構,我目前無法在構造函數上進行propper注入(以bar作為參數)。 該項目現在正在大量生產,因此目前無法進行這種重構。
IOC容器僅控制您告訴它要控制的內容。 它不知道的A
內部B
,因為它正在構建由容器直接,而不是管理。 您還需要inject
A
:
public class B {
@inject private A a;
public B() {}
...
}
而且您也不能只調用new B()
,還需要注入B
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.