2009-02-16 238 views
4

我之前使用過Spring(並喜歡它),但我想我會看看Guice可以Guice初始化bean嗎?

有沒有一種方法可以使用Guice來初始化類似地圖或列表的東西?例如,我在Spring之前完成了以下操作,將我想要處理的項目列表注入到某個bean中。

<property name="FilesToProcess"> 
    <list> 
     <value>file1.xml</value> 
     <value>file2.xml</value> 
    </list> 
</property> 

我該如何在Guice中做到這一點?

回答

6

Guice2有MultiBindings和MapBindings,它應該適合你。

https://github.com/google/guice/wiki/Multibindings

更新時間:

在此再次尋找後,似乎你可能會問你如何注入運行值到吉斯,也許任意對象。

Guice非常專注於做所有類型安全的代碼,所以它不會自然地將 放在這裏。我爲Guice提供的輸入是創建一個XML模式並使用jaxb將其吸入並注入結果對象。

有一個Names.bindProperties方法用於將常規舊屬性綁定到Guice 常量中。

還有一些與Spring的集成水平,所以你可能想把它當作 。

+0

謝謝!您的更新完全回答了我的問題。 – Vinnie 2009-02-19 16:50:02

2

Guice讓你注入類型文字。語法有點奇怪。有一個解釋原因的blog entry

的結合會是這個樣子:

public class SampleModule extends AbstractModule { 
    protected void configure() { 
     bind(new TypeLiteral<List<String>>() {}). 
       annotatedWith(Names.named("FilesToProcess")). 
       toInstance(Arrays.asList("file1.xml", "file2.xml")); 
    } 
} 

然後將應用程序代碼可以通過名字像這樣注入名單:

public class SampleClass { 
    private final List<String> files; 

    @Inject 
    public SampleClass(@Named("FilesToProcess") List<String> files) { 
     this.files = files; 
    } 
} 
1

我與戴維Stenglein同意了運行時的值。

有框架,如Obix專門在配置。我很喜歡Guice 代碼注入,但是它們更適合配置注入