有大量關於如何使用Guice Provider綁定到泛型類的在線資源,例如wiki entries like this和SOF questions like this。但是,我無法找到關於如何使用通用本身的提供程序的資源。Guice通用提供程序(提供程序本身是通用的,不是它綁定的類)
例如,可以說我有以下幾點:
public interface Foo {
...
}
public class Bar implements Foo {
...
}
正如你所看到的,酒吧有一個注射參數,必須在構造函數中。在我的情況下,我們無法將此參數移至字段或方法注入。
因此,現在我想爲Foo編寫一個Provider,但它返回一個Bar實例。事情是這樣的:
@Singleton
public class FooProvider<T extends Foo> extends Provider<Foo> {
@Inject
public FooProvider(Object someParameterWeMustInjectIntoConstructor) {
...
}
...
@Override
public Foo get() {
return new Bar(...);
}
...
}
注意這個類是如何依靠吉斯注射本身單身,所以供應商必須使用.toProvider(FooProvider.class)
進行配置。我們也只能使用構造函數注入,而不能使用方法或字段注入,這可能是因爲該提供者具有類型層次結構。
我想找到某種方式是使用.toProvider(FooProvider<Bar>.class)
,但我們都知道這是無效的Java語法。有誰知道我如何在模塊中使用Guice活頁夾的.toProvider(Class<? extends Provider>)
方法,以便我可以使用通用提供程序來創建具體的實現類?讓我知道我的問題是否有點混亂。
你必須使用反射 – Johan
目前尚不清楚爲什麼你使用'FooProvider擴展的供應商'而是說:'FooBarProvider擴展提供 {...返回新酒吧(...); }'。如果你真的需要這樣的事情,你能否詳細說明*爲什麼*你需要它? –
我接受的答案是我正在尋找的:) – ecbrodie