新的 bean() 切入點

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

Spring 2.5 推出了一個新的切入點指示符 -- bean(),允許在具有相符名稱模式的 bean 中選擇連接點。現在可以結合自動代理機制和 Spring-AspectJ 整合,即使有多個相同類型的 bean,也能選擇特定的 bean。 以前,您可以使用 BeanNameAutoProxyCreator 來達到類似的效果;然而,該機制不適用於 Schema-style 或 @AspectJ aspects。

除了選擇特定的 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 中選擇連接點
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

訂閱 Spring 電子報

隨時掌握 Spring 電子報的最新資訊

訂閱

領先一步

VMware 提供培訓和認證,以加速您的進展。

了解更多

取得支援

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

了解更多

即將到來的活動

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

查看所有