簡體   English   中英

如何使用Google Guice創建需要參數的對象?

[英]How to use Google Guice to create objects that require parameters?

也許我只是盲目,但我不知道如何使用Guice(剛開始)來替換此方法中的new調用:

public boolean myMethod(String anInputValue) {
    Processor proc = new ProcessorImpl(anInputValue);
    return proc.isEnabled();
}

對於測試,可能有一個不同的處理器實現,所以我想避免new調用,並在此過程中擺脫對實現的依賴。

如果我的類只記得處理器的一個實例,我可以通過構造函數注入它,但由於處理器被設計為不可變的,我每次都需要一個新的。

我將如何使用Guice(2.0)實現這一目標?

自從我現在使用Guice以來已經有一段時間了,但我記得有一種叫做“輔助注射”的東西。 它允許您定義一個工廠方法,其中提供了一些參數並注入了一些參數。 您可以注入處理器工廠,而不是注入處理器工廠,該工廠具有采用anInputValue參數的工廠方法。

我指向FactoryProviderjavadoc 我相信它應該對你有用。

您可以通過注入“提供程序”來獲得所需的效果,可以在運行時詢問為您提供處理器。 提供者提供了一種在請求之前推遲構造對象的方法。

他們在這里這里的Guice Docs中都有涉及。

提供商看起來像

public class ProcessorProvider implements Provider<Processor> {
    public Processor get() {
        // construct and return a Processor
    }
}

由於提供者是由Guice構建和注入的,因此他們自己可以注入比特。

你的代碼看起來像

@Inject
public MyClass(ProcessorProvider processorProvider) {
    this.processorProvider = processorProvider;
}

public boolean myMethod(String anInputValue) {
    return processorProvider.get().isEnabled(anInputValue);
}

您的處理器是否需要在整個生命周期內訪問anInputValue 如果沒有,可以將值傳入您正在使用的方法調用,例如:

@Inject
public MyClass(Processor processor) {
    this.processor = processor;
}

public boolean myMethod(String anInputValue) {
    return processor.isEnabled(anInputValue);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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