Spring 依賴注入 & Java 5(包括幻燈片和程式碼)

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

我在前往開羅的路上寫下這篇部落格。我們正飛過義大利西部,我能清晰地看到義大利的海岸線,海水湛藍,海浪溫柔地湧向岸邊。那裡的景色一定很美。我去開羅是為了參加由 Ahmed Hashim 組織的埃及使用者組會議,我相信他一定會做得非常出色。我將就 Spring 進行演講,這次的主題是依賴注入、型別安全和 Java 5。昨天(也就是 3 月 14 日),我在荷蘭 Loenen 的 Profict 冬令營為大約 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 方法的部落格文章和文章。
  • Rod Johnson 的Spring Framework 2.5 介紹
  • Juergen Hoeller 的Spring 2.5 的全面註解支援
  • Mark Fisher 的在 Spring 2.5 中自定義註解配置和元件檢測
  • Spring JavaConfig

    除了 @Autowired 支援之外,Spring JavaConfig 提供了一種全新的依賴注入方法。已經有很多部落格文章討論過 JavaConfig,所以我不會在這裡再次完整解釋它。我最近收到了一些關於 JavaConfig 狀態的問題。這個專案已經有一段時間沒有釋出里程碑版本了。這當然不是沒有原因的。雖然模型已經執行得相當好,但我們還有一些細節需要完善。我們希望釋出一個我們百分之百滿意的版本,目前它尚未完成。請關注JavaConfig 專案頁面和本部落格。新的里程碑版本即將釋出。

    JavaConfig 方法也在各種部落格文章中進行了更詳細的介紹

    正如我在 Loenen 和開羅的演講中也說過的那樣,Spring JavaConfig 尚未完成。仍有一些細節需要完善,以建立一個流暢的 DI 語言,支援基於 XML 的 DI 語言所具備的所有特性。在這方面(如果你願意的話),你可以給我們很大的幫助。嘗試 Spring JavaConfig 並告訴我們你的想法!

    結論

    我在昨天的演講中試圖傳達的另一個相當重要的觀點是,將 Spring 容器視為一個依賴注入平臺,並在其之上實現了各種 DI 風格。第一種風格,即基於 XML 的方法,已經存在 5 年了。第二種風格也已經存在相當長一段時間,現在為 BEA WebLogic 10 版本中的 EJB3 SessionBean 功能提供了基礎(也以 Pitchfork 的名稱在公共領域可用)。我們釋出的最後一種風格是 @Autowired 風格,接下來是 JavaConfig。擁有這個平臺對我們來說至關重要。它將幫助我們為你提供良好的體驗,並提供全面的向後相容性,無論你使用 JavaConfig、@Autowired 還是我們基於 XML 的方法(或者,同時使用所有這些方法)。

    關於原始碼和幻燈片

    在幻燈片中,你會看到我放入了一張福特 Model T 的圖片。我描述依賴注入時總是使用的類比是汽車裝配線。沒有汽車裝配線(根據維基百科),福特每月只能生產 11 輛 Model T。有了裝配線,一輛 Model T 只需 93 分鐘。將(不知道它們將如何組裝的)零件組裝成一輛能工作的汽車的標準化流程非常有利。在我看來,採用不觸及主線邏輯的方法非常重要。JavaConfig 提供了這一點。

    程式碼也已附加。它依賴於 JTA API(演示使用了 Hibernate),而 JTA API 沒有安裝在 Maven Repository 中。 Lucio Benfante 在他的部落格中介紹瞭如何解決這個問題(將 JTA API 安裝到你的本地 Repository)。

    安裝 JTA API 後,執行 com.carplant.plant 包中的 CarPlantIntegrationTests,並閱讀類註釋。註釋解釋瞭如何啟用 JavaConfig、Autowire 配置和 XML 配置(JavaConfig 預設已啟用)。

    [更新] 添加了一個關於 JavaConfig 的資源

訂閱 Spring 新聞通訊

訂閱 Spring 新聞通訊保持聯絡

訂閱

先行一步

VMware 提供培訓和認證,助你快速前進。

瞭解更多

獲得支援

Tanzu Spring 透過一項簡單的訂閱提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位制檔案。

瞭解更多

即將舉辦的活動

檢視 Spring 社群即將舉辦的所有活動。

檢視全部