Spring 相依性注入與 Java 5 (包含投影片與程式碼)

工程 | Alef Arendsen | 2008年3月18日 | ...

我寫這篇文章時,正前往開羅的路上。我們正飛越義大利西部,我可以清楚地看到義大利海岸線,湛藍的海水和海浪輕柔地朝岸邊移動。現在那裡一定很棒。我正前往開羅參加由 Ahmed Hashim 組織的 埃及使用者群組 會議,我相信他一定做得非常出色。這次我將以相依性注入、型別安全和 Java 5 為主題,介紹 Spring。昨天(也就是 3 月 14 日),我在荷蘭 Loenen 的 Profict Wintercamp 為約 60 或 70 名聽眾做了幾乎相同的簡報。

最近,關於型別安全、Spring 和其他相依性注入方法的討論很多。我發現太多人將 Spring 描述為具有非型別安全的相依性注入功能,更糟糕的是,有人將 Spring 描述為依賴 XML。因為我不能永遠看著飛機窗外(好吧,我可能可以,但沒那麼有用),我想我應該寫一篇關於 Spring 和 Java 5 相依性注入目前狀態的簡短部落格文章。

隨著 Spring 2.5 中新增的功能以及 Spring 的子專案 JavaConfig,型別安全論點以及 Spring 與 XML 綁定的論點已經不再成立。雖然過去我們一直說 Spring 並未與 XML 耦合,但表達配置詳細資訊的唯一可行選項確實是 XML。但自 Spring 2.5 以來,這不再是理論上的爭論;現在有一個實際可用的選項,可以使用純 Java 配置您的相依性。

Spring @Autowired 支援

Spring 2.5 本身提供基於註解的相依性注入,其中使用 @Autowired 註解和 @Qualifier 註解(或任何其他自訂註解)向 Spring 容器提供提示,說明在哪裡注入相依性。我不會在這裡涵蓋整個機制。相反,我將重點介紹涵蓋 @Autowired 方法的部落格文章和文章
  • Spring Framework 2.5 介紹,作者:Rod Johnson
  • Spring 2.5 的完整註解支援,作者:Juergen Hoeller
  • 在 Spring 2.5 中自訂註解設定與元件偵測,作者:Mark Fisher
  • Spring JavaConfig

    除了 @Autowired 支援之外,Spring JavaConfig 還提供了一種全新的相依性注入方法。許多部落格文章已經討論過 JavaConfig,因此我不會在這裡再次完整解釋它。最近我收到了一些關於 JavaConfig 狀態的問題。我們已經有一段時間沒有發布此專案的任何里程碑版本。這當然不是沒有原因的。雖然該模型已經運作良好,但我們仍在充實一些細節。我們希望發布我們 100% 滿意的東西,而現在,它還沒有完成。請密切關注 JavaConfig 專案頁面 和此部落格。新的里程碑版本即將發布。

    JavaConfig 方法在許多部落格文章中也有更詳細的說明

    正如我在 Loenen 和開羅的會議中所說,Spring JavaConfig 尚未完成。仍然有一些細節需要充實,以創建一種流暢的 DI 語言,該語言支援 XML 基礎 DI 語言的所有功能。如果您願意,您可以在這裡為我們提供很大的幫助。試用 Spring JavaConfig 並告訴我們您的想法!

    結論

    我在昨天的簡報中試圖傳達的另一個非常重要的觀點是,將 Spring 容器視為一個相依性注入平台,其上實作了各種 DI 風格。第一種風格已經存在 5 年了(基於 XML 的方法)。第二種風格也已經存在相當長一段時間了,現在為 BEA WebLogic 10 版中的 EJB3 SessionBean 功能提供了基礎(並且也以 Pitchfork 的名稱在公共領域中可用)。我們發布的最後一種風格是 @Autowired 風格,接下來是 JavaConfig。擁有平台對我們來說至關重要。無論您使用的是 JavaConfig、@Autowired 或我們基於 XML 的方法(或者,同時使用所有方法),它都將幫助您獲得良好的體驗,並具有完整的向後相容性。

    關於原始碼與投影片的說明

    在投影片中,您會看到我包含了一張福特 T 型車的圖片。我在描述相依性注入時總是使用的類比是汽車組裝線。根據維基百科,在沒有汽車組裝線的情況下,福特每月可以生產 11 輛 T 型車。有了組裝線,一輛 T 型車僅需 93 分鐘。將零件(不知道它們將如何組裝)組裝成一輛可運作的汽車的標準化流程非常有利。我認為,採用一種不影響您的主線邏輯的方法非常重要。JavaConfig 提供了這一點。

    程式碼也隨附在內。它依賴於 JTA API(示範使用 Hibernate),該 API 未安裝在 Maven 儲存庫中。Lucio Benfante 撰寫部落格文章介紹了如何解決這個問題(在您的本機儲存庫中安裝 JTA API)。

    安裝 JTA API 後,執行 com.carplant.plant 套件中的 CarPlantIntegrationTests 並閱讀該類別的註解。這說明了如何啟用 JavaConfig、Autowire 配置和 XML 配置(預設已啟用 JavaConfig)。

    [更新] 新增一篇關於 JavaConfig 的資源

取得 Spring 電子報

保持與 Spring 電子報的聯繫

訂閱

領先一步

VMware 提供訓練與認證,加速您的進展。

了解更多

取得支援

Tanzu Spring 在一個簡單的訂閱中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援與二進位檔案。

了解更多

即將到來的活動

查看 Spring 社群中所有即將到來的活動。

檢視全部