2010-06-16 52 views
5

我已經注意到幾個網頁,顯然Spring 3.0支持@Inject從JSR-330。由於我們真的希望在我們的庫中爲Web應用程序和獨立應用程序使用JSR-299語法來進行依賴注入,並且可以選擇Weld,所以如果Spring能夠做到這一點,那將會很好。作爲Spring的新手,我嘗試下載Spring Framework發行版,並將所有jar放在Eclipse構建路徑上。沒有注入註釋,所以我現有的使用Weld的測試項目沒有編譯。Spring可以理解@Inject將Weld替換爲JSR-299的實現嗎?

這可以用Spring來完成嗎?我需要做些什麼才能使其運行?

(我知道吉斯最終會支持這一點。這是隻有在SVN現在,如果有一個官員,在春天發佈其能,這將是更好的。)


它可以做完了。必須單獨下載JSR-330 jar包,並使用cglib來解析手動編寫的@Configuration類以及公共日誌記錄實現。

與Weld最大的區別似乎是需要手動編寫接線而不是神奇地發現(稍微麻煩一點,但可能會使更強大的應用程序),再加上啓動時間要少得多。我對Spring仍然陌生 - 有沒有辦法讓@Configuration類自動發現?

回答

2

Spring 3.0.x Reference documentation

JSR 330的@Inject註解來代替Spring的@Autowired在下面的示例中使用。 @Inject沒有一個必需的屬性,與Spring的@Autowire註解不同,後者有一個必需的屬性來指示被注入的值是否可選。如果您在類路徑中具有JSR 330 JAR,則會自動啓用此行爲。

所以,你可以讓你的代碼無關的DI框架,通過使用@注入,但你仍然需要包括與javax.inject類的jar包在你的項目,因爲春節不把它們運本身。您可以在JSR-330's Google Code site的下載部分找到相關的jar文件。

+0

我找到了相同的片段,但我無法使其工作。如果可以的話,請分享你是如何做到的。 – 2010-06-16 17:55:52

+0

直到今晚,我才能看到該代碼。你從JSR的網站上獲得了jar嗎? http://code.google.com/p/atinject/ – Ophidian 2010-06-16 18:07:29

+0

顯然我無法閱讀。我沒有單獨下載JSR-330罐子。我明天再試。 – 2010-06-16 19:06:39

2

javax.inject軟件包不包含在Spring 3中,但它支持它,如果它存在。

如果您查看AutowiredAnnotationBeanPostProcessor的源代碼,您會看到構造函數使用反射來查找javax.inject.Inject,並在發現消息時記錄它。它沒有編譯時間依賴性。

您需要從其他來源(例如JavaEE 6 SDK)找到JSR-330 JAR。

相關問題