Spring 2.5 的全面註解支援

工程 | Juergen Hoeller | 2008 年 1 月 28 日 | ...

Spring 2.5 背後的核心主題之一是全面的基於註解的配置。我們一直在討論和撰寫大量關於 @Autowired、Spring MVC 的 @RequestMapping 的部落格,以及對使用 JUnit4 或 TestNG 編寫的帶註解測試的新支援。@Autowired 無疑是 Spring 2.5 的核心註解,可用於服務元件、Web 元件、單元測試,甚至在使用 Spring 的 @Configurable 和 AspectJ 編織時的領域物件。Spring MVC 的 @RequestMapping 同樣靈活,支援多種處理方法簽名變體。

今天我……

Spring Dynamic Modules 達到 1.0 版本!

工程 | Adrian Colyer | 2008 年 1 月 25 日 | ...

好的,這比我們最初預期的要長得多,但我真的很高興地說,Spring Dynamic Modules 專案今天達到了其 1.0 里程碑。當我第一次在 2006 年 9 月釋出關於這個主題的帖子時("Spring OSGi 支援勢頭增強"),最初的規範只是 Spring Framework 的一個問題附件,與更廣泛的 OSGi 社群的聯絡才剛剛開始建立。

快進十八個月,Spring Dynamic Modules 已成為 Spring 組合中的一個成熟專案,其提交者來自 SpringSource、BEA 和 Oracle。BEA 和 Oracle 都在使用 Spring Dynamic Modules 構建他們自己的基於 OSGi 的產品(例如,參見 "WebLogic Event Server - 我們為什麼使用 Spring"),並且 Spring Dynamic Modules 討論組已有近 1000 名成員。OSGi Alliance 本身也成立了一個 企業專家組……

Spring Dynamic Modules 1.0 來了

工程 | Costin Leau | 2008 年 1 月 25 日 | ...

我很高興報告(與 Adrian 一起)經過 3 個里程碑和 2 個候選釋出版後,Spring Dynamic Modules(之前稱為 Spring OSGi)1.0 已正式釋出

自我上一篇帖子(關於 1.0 M1)以來,許多功能得到了改進或增加;我將在未來的博文中更詳細地討論它們(還有參考文件詳細解釋了該庫),所以我在此僅列舉幾點:

- 一致性

我們希望提供一個強大、簡單且一致的程式設計模型。這就是 Spring Dynamic Modules 構建在 Spring 之上,並利用其久經考驗的概念、可靠性和普適性的原因。

- 高度非侵入性

推薦使用 Spring DM 的方式是不要在你的程式碼中使用它的類,也不要在你的 Bundle 清單檔案中匯入它們。如果你不在程式碼中使用 Spring,只將其用於應用程式配置,同樣的規則也適用。Spring DM 會為你建立應用程式上下文,因此你無需依賴 Spring 或 Spring DM。而且不用擔心自定義名稱空間或 XML Schema 之類的事情,我們已經涵蓋了這些。

- OSGi 服務動態生命週期管理

這是 Spring DM 最重要的特性之一——能夠像與普通 Bean 一樣與 OSGi 服務互動。你無需編寫任何程式碼即可釋出和消費 OSGi 服務;我們將為你處理這些動態變化——並且你擁有完全的控制權(將來會詳細介紹)。

- 更智慧的整合測試框架

由於我們在內部廣泛使用 Spring-DM 整合測試,我們改進了預設設定、Maven 整合,並使自動清單生成比以前更快、更智慧。例如,該框架會自動確定測試 Bundle 中可用的類,並且不會為其生成匯入語句。

- 簡單的 Bundle 互動

Andy Piper(部落格)添加了一種簡單、宣告式的方式,根據模組生命週期和 Spring Bean 依賴關係來安裝/啟動/停止/更新 Bundle。

- 受管的啟動/關閉上下文建立

在 OSGi 中,應用程式被分解成各種模組(也稱為 Bundle),它們相互依賴於彼此的服務。這在模組之間建立了一個依賴樹,這在啟動和關閉過程中變得非常重要。傳統上,這可以透過根據依賴順序安裝和啟動 Bundle 來解決,然而,這並不能完全解決問題。正如 OSGi 規範建議的那樣,初始化時間長的 OSGi 服務(例如連線池)應該依賴於與用於啟動和停止 Bundle 的執行緒不同的執行緒。這意味著,如果一個 Bundle 已啟動,並不代表其服務也已可用。而且並非每個應用程式都準備好在啟動期間等待所需的服務——事實上,很少有這樣做。這意味著一個 Bundle 將會失敗,因為它依賴的服務在幾毫秒後才釋出(OSGi 預設是一個虛擬機器內平臺,其中事情發生得非常快)。

這種行為並非罕見——事實上,在多核平臺和多個 Bundle 同時啟動時,這種情況非常普遍。Spring DM 透過確定依賴關係(從 Spring 配置中獲取)並在它們可用後才建立應用程式上下文來解決這個問題。在關閉時也會採用類似的過程,Spring DM 將根據依賴順序停止上下文,這樣你就無需擔心啟動或停止你的 Bundle。

- 無執行緒依賴等待

我無法討論依賴機制而不提及 Hal Hildebrand(參見他的部落格)實現的用於依賴等待的“無執行緒”方法(我知道這聽起來有點像矛盾修飾,我們正在為此想一個更好的名字)。由於各種服務需要可用才能使模組正常啟動,因此需要某種形式的等待/監控,這傳統上意味著使用一個執行緒。

然而,在一個 OSGi 平臺上可能有(而且將來會有)多個模組(幾十個很常見)——為每個模組使用一個等待執行緒根本無法擴充套件。我們努力改進這個模型,我相信我們提供了一個非常好的解決方案——在等待過程中完全使用執行緒。這意味著無論部署了 3 個 Bundle 還是 300 個,都不會消耗 CPU 時間,除非你的模組實際開始啟動。

 

Spring Dynamic Modules 不僅僅是將一個 API “Spring 化”,而是處理一個不同的執行時環境。

 

在工具方面,Spring IDE 支援 Spring DM 名稱空間,並且(感謝 Christian)還為 Eclipse PDE 提供了 Spring-DM 特定的目標,這些功能在 Spring IDE nightly builds 中可用(有關安裝和使用外掛的更多資訊可在參考文件中找到)。

 

未來方向

 

既然 1.0 已經發布,下一步是什麼?有很多領域需要涵蓋:

Web 支援

OSGi 平臺提供了專用的 Http 服務,但使用它需要編寫程式碼。資源載入、JSP 生成和部署等事情可以大大簡化。這是 1.1 版本的主要重點領域。

持久化

現代持久化工具提供了諸如延遲載入等高階功能,這些功能由於依賴於類生成和代理而會彎曲 OSGi 環境強制執行的模組邊界。我們希望解決這個問題,並像 Web 支援一樣,在使用純 JDBC 或/和 ORM 工具時提供流暢的體驗。

AOP

繼持久化問題之後,我們正在尋找在 OSGi 內部進行通用 AOP 的解決方案。這是一個難題,要正確實現它,需要內部 OSGi 平臺的支援。好訊息是,像 Equinox Aspects 這樣的專案已經開闢了道路,並且 OSGi 企業專家組 (EEG) 也已將此問題提上議程。

 

說夠了

 

如果你想了解更多關於 Spring Dynamic Modules 的資訊,請檢視專案頁面和參考文件,並務必使用我們的郵件列表(論壇即將上線)。此外,最近我們製作了一些 OSGi/Spring DM 截圖影片,這些影片可在 Spring DM 主頁上找到。第一個影片(分為兩部分),由我親自制作,展示瞭如何快速建立一個專案,以便使用 Spring DM 進行整合測試。
為什麼是整合測試?因為使用 Spring DM,這是一個非常簡單快捷的過程,也是學習 OSGi 的非常有效的方式(尤其是在模組化方面)。

未來會有更多截圖影片——請告訴我們你想看什麼,我們將根據請求數量進行安排。

事不宜遲,"使用 Spring DM 進行 OSGi 整合測試"

 

領域物件依賴注入功能的新改進

工程 | Ramnivas Laddad | 2008 年 1 月 24 日 | ...

Spring 的依賴注入(DI)機制允許配置在應用程式上下文中定義的 Bean。如果你想將同樣的想法擴充套件到非 Bean 物件怎麼辦?Spring 對領域物件 DI 的支援利用 AspectJ 編織將 DI 擴充套件到任何物件,即使它是由 Web 或 ORM 框架建立的。這使得建立具有豐富領域行為的物件成為可能,因為領域物件現在可以與注入的物件協作。在這篇部落格中,我討論了 Spring Framework 在這一領域的最新改進。

領域物件 DI 背後的核心思想非常簡單:一個 AspectJ 編織的切面選擇對應於符合特定規範的任何物件的建立反序列化的連線點。對這些連線點的通知將依賴項注入到正在建立或反序列化的物件中。當然,細節決定成敗。例如,如何選擇對應於反序列化的連線點,或者如何確保每個物件只注入一次依賴項?透過提供一些預先編寫的……

Spring 技能要求超越 EJB

工程 | Rod Johnson | 2008 年 1 月 24 日 | ...

招聘資訊是衡量技術真正採用程度的良好指標。它們表明公司是否正在投入資金,從而能夠區分實質與炒作;它們表明開發者掌握和增長相關技能的重要性(這是技術延續的重要因素);並且它們為公司採用特定技術的安全性提供了良好的指導。

因此,Indeed.com 的 jobtrends 網站(一個招聘資訊聚合網站)是一個重要的資源。它允許跟蹤招聘需求數量隨時間變化的趨勢,以及……

SpringSource 認證計劃

工程 | Daryl Heinz | 2008 年 1 月 17 日 | ...

注:此帖子已編輯,以反映 Spring 遷移至 Pivotal。關於Spring 培訓與認證的最新部落格可在此處檢視。

自從六個月前我加入 SpringSource 擔任培訓總監以來,我一直聽到一個持續的需求。基於全球範圍內對 Spring 技能日益增長的需求,開發者和顧問們正在尋求可量化的方式來展示他們的 Spring 專業知識。同樣,這些需求背後的招聘經理們也在要求推出認證計劃,以幫助識別和招聘具備立即有用、基礎 Spring 知識的技術人員。

正如 Spring 專案團隊回應開源社群需求的方式一樣,我們也做出了回應,並高興地宣佈推出 SpringSource 認證計劃。該計劃於本月(2008 年 1 月)啟動,首個認證是 Spring Framework Professional……

採納的力量:為什麼沒有公司強大到足以拒絕開發者想要的東西

工程 | Rod Johnson | 2008 年 1 月 16 日 | ...

當我們在倫敦完成首屆年度 Spring eXchange 時,這真是新聞不斷的一天。首先,Sun Microsystems 收購 MySQL 的訊息,然後是期待已久的 Oracle 收購 BEA Systems 的訊息。在進一步評論之前,我想祝賀我們在 MySQL 的所有朋友,特別是 Mårten Mickos,以及我們在 BEA 的所有朋友。這個行業的整合趨勢正在加強。

作為一家開源公司,我們很高興看到 MySQL 因其努力而獲得回報。我們看到了 Mårten 和他的同事們在構建他們的軟體、社群和強大……

Tony Hoare 生日快樂

工程 | Rod Johnson | 2008 年 1 月 14 日 | ...

上週五是 Tony (C.A.R.) Hoare 的生日。誰是 C. A. R. Hoare?如果你是一名程式設計師,你可能熟悉快速排序(Quicksort)——一種優雅且出奇簡單的排序演算法,在大多數情況下速度極快。如果你學習過計算機科學,你幾乎肯定在無數種語言中實現過快速排序,並且會認出此頁面上的動畫。Hoare 於 1960 年發明了快速排序,它現在是使用最廣泛的排序演算法。快速排序動畫

除其他貢獻外,Hoare 還發明瞭用於指定互動的通訊順序程序 (CSP) 語言……

捕獲故障和系統狀態(第一部分)

工程 | Alef Arendsen | 2008 年 1 月 7 日 | ...

在 Spring Experience 大會上,我主持了一場關於多個方面的會議。其中一個是我上週描述的Hibernate 同步切面。另一個是能夠捕獲首次故障和系統狀態的切面,有時稱為首次故障資料捕獲 (FFDC)。我主持這場會議是為了展示一些非常有用的切面,但人們可能在實踐中尚未遇到過。我經常聽到人們詢問除了日誌記錄、跟蹤、事務管理和安全性之外的切面。我認為 Hibernate 同步切面和 FFDC 切面都是很好的例子。

引言

FFDC 的目標是在錯誤發生時捕獲儘可能多的關於系統當前狀態的資訊。以下條目解釋了這個切面如何工作以及如何在您自己的應用程式中使用它。

讓我們……

在 JDBC 操作之前,重新整理 Hibernate Session(包含 TSE 示例程式碼)

工程 | Alef Arendsen | 2008 年 1 月 4 日 | ...

在同一個事務中混合使用物件關係對映器 (ORM) 的程式碼和不使用 ORM 的程式碼,可能會導致資料在底層資料庫中本應可用時卻不可用的問題。由於這種情況我偶爾會遇到,所以我認為如果我寫下解決這個問題的方法,對大家都會有幫助。

簡而言之:本帖其餘部分將介紹一個切面,該切面觸發底層持久化機制(JPA、Hibernate、TopLink)將任何髒資料傳送到資料庫。

順便說一句,我在去年 12 月 Spring Experience 大會 的一個環節中展示了這個切面,這篇帖子也包含了原始碼,供你們……

訂閱 Spring 新聞通訊

訂閱 Spring 新聞通訊,保持聯絡

訂閱

領先一步

VMware 提供培訓和認證,助您快速提升。

瞭解更多

獲取支援

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

瞭解更多

近期活動

檢視 Spring 社群的所有近期活動。

檢視全部