簡體   English   中英

Guice場注入

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM