Ramnivas Laddad

Ramnivas Laddad

校友
部落格文章作者:Ramnivas Laddad

擴充套件 Spring Cloud

工程 | 2014年8月5日 | ...

Spring Cloud 最有趣的特性之一是其可擴充套件性。您可以擴充套件它以支援額外的雲平臺、增強現有支援的雲平臺、支援新的服務、新的服務聯結器——所有這些都不需要修改 Spring Cloud 程式碼本身。在本篇部落格中,我們將探討這一特性。如果您尚未閱讀,請務必先閱讀本系列的第一篇第二篇部落格,以獲取足夠的背景資訊。

可擴充套件性的三個維度

Spring Cloud 提供了沿三個正交方向的可擴充套件性。您可以在這些方向之一上對其進行擴充套件,而正交性確保了……

以程式設計方式使用 Spring Cloud

工程 | 2014年7月29日 | ...

上一篇部落格中,我展示瞭如何使用Spring Cloud的 Java 配置選項宣告性地獲取服務聯結器(如果您需要,也支援 XML 名稱空間)。在本篇部落格中,我們將仔細探討如何以程式設計方式使用 Spring Cloud。這對於您無法使用 Java 或 XML 配置的情況會很有幫助。它還將揭示 Spring Cloud 的工作原理,併為您閱讀本系列中討論擴充套件 Spring Cloud 的下一篇部落格做好準備。

要使用 Spring Cloud,我們需要訪問一個 Cloud 類的物件。但是,您不能直接建立 Cloud 物件(它的建構函式不是公共的)。相反,您將透過 CloudFactory 獲取它……

介紹 Spring Cloud

工程 | 2014年6月3日 | ...

開發、部署和操作雲應用程式應該像本地應用程式一樣容易(甚至更容易)。這過去是,將來也應該是任何雲平臺、庫或工具背後的指導原則。Spring Cloud——一個開源庫——使為雲開發 JVM 應用程式變得容易。有了它,應用程式可以在 Cloud Foundry 和 Heroku 等多個雲平臺中輕鬆連線服務並發現關於雲環境的資訊。此外,您可以將其擴充套件到其他雲平臺和新服務。

在本篇部落格(系列第一篇)中,我將介紹 Spring Cloud 並從應用程式開發者的角度展示其用法。我們將開發一個簡單的應用程式,並將其部署到 Cloud FoundryHeroku……

使用 Spring 和 Cloud Foundry 服務:第二部分 - 自動重新配置

工程 | 2011年11月4日 | ...

如果您觀看了Cloud Foundry 釋出會的影片,您會看到我們部署了從 Spring Web Flow 示例下載的 Spring Travel 應用程式,將 MySQL 服務繫結到它,然後將應用程式拖放到 STS 中的 Cloud Foundry 伺服器,而無需對應用程式本身進行任何修改。由於應用程式配置為使用本地資料庫,這怎麼可能呢?這就是自動重新配置發揮作用的時候。

Cloud Foundry 致力於降低您的初始投資。除了金錢之外,真正的投資來自於開發者花費的時間……

使用 Spring 和 Cloud Foundry 服務:第一部分 - 基礎知識

工程 | 2011年10月13日 | ...

Cloud Foundry 提供的服務使得編寫高效且實用的應用程式成為可能。開發者現在可以自由選擇合適的各類服務,而無需擔心其運維。例如,應用程式的一部分可以選擇 Postgres 用於事務訪問至關重要的部分,MongoDB 用於將資料作為文件集合進行互動有意義的部分,Redis 用於鍵值是正確抽象的部分,以及 RabbitMQ 用於訊息傳遞有助於建立有效架構的部分。在這個由四部分組成的部落格系列中,我們將探討 Spring 應用程式如何使用 Cloud Foundry……

領域物件依賴注入特性新改進

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

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

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

新的 bean() 切入點

工程 | 2007年9月24日 | ...

Spring 2.5 提供了一個新的切入點指示符 -- bean(),它允許選擇與名稱模式匹配的 bean 中的連線點。現在,即使存在多個同類型的 bean,也可以結合自動代理機制和 Spring-AspectJ 整合來選擇特定的 bean。以前,您可以使用 BeanNameAutoProxyCreator 來實現類似的結果;但是,該機制不適用於 Schema 風格或 @AspectJ 的切面。

除了選擇特定的 bean 之外,如果您遵循合適的命名約定,此切入點指示符還提供了兩種有趣的方式來選擇 bean

  1. 選擇 bean 的垂直切片: 如果您遵循一種約定,bean 名稱包含一個字串,該字串從業務角度指示其角色,則 bean() 切入點可以根據其業務角色選擇 bean。例如,如果 bean 名稱以表示其業務功能的字串開頭,您可以使用 bean(account*) 切入點來選擇所有與會計相關的 bean,例如 accountRepositoryaccountServiceaccountController
  2. 選擇 bean 的水平切片: 如果您遵循一種約定,bean 名稱包含一個字串,該字串從架構角度指示其角色,則 bean() 切入點可以根據其架構角色選擇 bean。例如,如果 bean 名稱以表示其架構角色的字串結尾,您可以使用 bean(*Repository) 來選擇所有 Repository bean。如果沒有 bean() 切入點,您必須依賴包結構或基於型別的切入點,這有時可能會有點過於受限。
The bean() Pointcut Designator

圖 1:使用 bean() 切入點根據名稱選擇 bean 的水平和垂直切片

此切入點是 AspectJ 切入點表示式語言的 Spring 特定擴充套件,因此僅在基於 Spring 的應用程式中有用。名稱模式遵循 AspectJ 的名稱模式匹配規則,其中 '*' 是唯一允許的萬用字元。下表顯示了一些示例切入點以及它們選擇的 bean。
切入點 選擇的連線點
bean(accountRepository) 名稱為 "accountRepository" 的 bean
!bean(accountRepository) 除了 "accountRepository" bean 之外的任何 bean
bean(*) 任何 bean
bean(account*) 名稱以 "account" 開頭的任何 bean
bean(*Repository) 名稱以 "Repository" 結尾的任何 bean
bean(accounting/showaccount) 名稱為 accounting/showaccount 的 bean(例如,指定處理該 URL 的控制器)
bean(accounting/*) 名稱以 "accounting/" 開頭的任何 bean(例如,指定處理任何與會計相關的 URL 的控制器)
bean(accounting/*/edit) 名稱以 "accounting/" 開頭並以 "/edit" 結尾的任何 bean(例如,指定處理與會計相關的編輯操作功能的任何控制器)
bean(*dataSource) || bean(*DataSource) 名稱以 "dataSource" 或 "DataSource" 結尾的任何 bean
bean(service:name=monitoring) 名稱為 "service:name=monitoring" 的 bean

領先一步

VMware 提供培訓和認證,助您加速進步。

瞭解更多

獲取支援

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

瞭解更多

近期活動

檢視 Spring 社群所有即將到來的活動。

檢視全部