2011-07-01 27 views
0

如何讓DI在webapp中工作?到目前爲止,我已經做了以下內容:如何讓DI與Guice和Webapps一起工作?

1)註釋setter方法與@Inject

2)擴展AbstractModule,這樣它就綁定的接口類的實現類,其制定者在步驟1

被註釋的屬性

3)擴展GuiceContextServletListener和壓倒getInjector以便它返回Guice.createInjector(new ExtendedAbstractModule())

4)註冊在web.xml擴展GuiceContextServletListener作爲監聽

我已驗證在webapp啓動時調用了擴展的GuiceContextServletListener.getInjector()方法。其setter被註釋的屬性沒有被注入並且仍然是null

+2

如何獲取需要注入屬性的對象的實例?你用'new'實例化它嗎? – Daniel

+0

是的我正在使用新的實例化對象。該對象在web.xml中配置的servlet中實例化,而不是通過guice綁定。 – Hokiedood

回答

0

你在setter上使用了什麼註釋?

我通常使用@Named註釋來獲取可以單獨指向屬性文件或設置的屬性值。

http://code.google.com/p/google-guice/wiki/BindingAnnotations

@Inject

無效somethingSetter(@Named( '標籤')的String){

}

有一個教程如何建立一個完整的Java web在此使用Guice和Sitebricks的服務: http://www.techtraits.ca/five-minute-guide-to-setting-up-a-java-webserver/

+0

我只使用@Inject註釋。我也曾嘗試使用@Inject和@Named註釋,並將綁定更改爲綁定到註釋名稱。 – Hokiedood

0

我繼續創建ServletModule服務於用@Inject setter實例化對象的servlet。在實例化對象後,我從ServletContext獲得Injector,並調用injectMembers方法將實例化的對象傳遞給它。