Ramnivas Laddad
以程式方式使用 Spring Cloud
在上一篇部落格中,我向您展示如何使用Spring Cloud的 Java 配置選項來以宣告方式取得服務連接器(如果您需要,也有 XML 命名空間支援)。 在這篇部落格中,我們將仔細研究如何以程式方式使用 Spring Cloud。 這將有助於您無法使用 Java 或 XML 配置的情況。 它還將揭開 Spring Cloud 如何運作的神秘面紗,並為本系列的下一篇部落格做好準備,我們將在其中討論擴展 Spring Cloud。
要使用 Spring Cloud,我們需要存取 Cloud
類別的物件。 但是,您無法直接建立 Cloud
物件(其建構子不是 public)。 相反,您將透過 CloudFactory
取得它...
Spring Cloud 簡介
開發、部署和運營雲端應用程式應該像本地應用程式一樣容易(如果不是更容易的話)。 這應該是任何雲端平台、程式庫或工具背後的一個指導原則。 Spring Cloud(一個開放原始碼程式庫)使為雲端開發 JVM 應用程式變得容易。 透過它,應用程式可以輕鬆地連線到服務並發現有關雲端環境的資訊,在多個雲端中,例如 Cloud Foundry 和 Heroku。 此外,您可以將其擴展到其他雲端平台和新服務。
在這篇部落格(系列中的第一篇)中,我將介紹 Spring Cloud 並從應用程式開發人員的角度展示其用法。 我們將開發一個簡單的應用程式並部署到Cloud Foundry 和 Heroku...
將 Cloud Foundry 服務與 Spring 搭配使用:第 2 部分 - 自動重新配置
如果您觀看了 Cloud Foundry 發表會的影片,您會看到我們部署了從 Spring Web Flow 範例下載的 Spring Travel 應用程式、將 MySQL 服務繫結到它,並將應用程式拖放到 STS 中的 Cloud Foundry 伺服器,而無需在應用程式本身中進行任何變更。 既然應用程式配置為使用本地資料庫,這怎麼可能呢? 這就是自動重新配置發揮作用的時候。
Cloud Foundry 致力於讓您的初始投資保持在較低的水平。 除了金錢之外,真正的投資來自開發人員的時間...
將 Cloud Foundry 服務與 Spring 搭配使用:第 1 部分 - 基礎知識
Cloud Foundry 中提供的服務使編寫高效且有效的應用程式成為可能。 開發人員現在可以選擇合適的服務,而無需擔心運營這些服務。 例如,應用程式的一部分可以選擇 Postgres 用於事務性存取至關重要的部分,MongoDB 用於將資料作為文件集合進行交互有意義的部分,Redis 用於鍵值是正確抽象的部分,以及 RabbitMQ 用於訊息傳遞有助於建立有效的架構。 在這個由四部分組成的部落格系列中,我們將探討 Spring 應用程式如何使用 Cloud Foundry...
網域物件相依性注入功能的新改進
Spring 的相依性注入 (DI) 機制允許配置在應用程式環境定義中定義的 bean。 如果您想將相同的想法擴展到非 bean 怎麼辦? Spring 對網域物件 DI的支援利用 AspectJ 織入將 DI 擴展到任何物件,即使它是由網路或 ORM 框架建立的。 這使得建立行為豐富的網域物件成為可能,因為網域物件現在可以與注入的物件協作。 在這篇部落格中,我將討論 Spring 框架在這個領域的最新改進。
網域物件 DI 背後的核心思想非常簡單:一個 AspectJ 織入的 aspect 選擇對應於符合特定規範的任何物件的建立或反序列化的連接點。 對這些連接點的建議將相依性注入到正在建立或反序列化的物件中。 當然,魔鬼藏在細節中。 例如,您如何選擇對應於反序列化的連接點,或者如何僅對每個物件注入一次相依性? 透過提供一些預先編寫的...
新的 bean() 切入點
Spring 2.5 具有一個新的切入點指示符 -- bean(),它允許在具有匹配名稱模式的 bean 中選擇連接點。 現在可以將自動代理機制與 Spring-AspectJ 整合一起使用,即使有多個相同類型的 bean,也可以選擇特定的 bean。 早些時候,您可以使用BeanNameAutoProxyCreator來實現類似的結果;但是,該機制不適用於 Schema 樣式或 @AspectJ aspect。
除了選擇特定的 bean 之外,如果您遵循適當的命名慣例,此切入點指示符還提供了兩種有趣的方法來選擇 bean
- 選擇 bean 的垂直切片:如果您遵循一種慣例,其中 bean 名稱包含一個字串,指示它們從業務角度的角色,則 bean() 切入點可以根據 bean 的業務角色選擇 bean。 例如,您可以使用bean(account*)切入點來選擇所有與會計相關的 bean,例如 accountRepository、accountService 和 accountController,如果 bean 名稱以表示其業務功能的字串開頭。
- 選擇 bean 的水平切片:如果您遵循一種慣例,其中 bean 名稱包含一個字串,指示它們從架構角度的角色,則 bean() 切入點可以根據 bean 的架構角色選擇 bean。 例如,您可以使用 bean(*Repository) 來選擇所有儲存庫 bean,如果 bean 名稱以表示其架構角色的字串結尾。 如果沒有 bean() 切入點,您必須依賴套件結構或基於類型的切入點,有時這可能會有些過於嚴格。

圖 1:使用 bean() 切入點根據其名稱選擇 bean 的水平和垂直切片
此切入點表示 Spring 特定的 AspectJ 切入點表達式語言擴展,因此僅在基於 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 |