新的 bean() 切入點

工程 | Ramnivas Laddad | 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,如果 bean 名稱以表示其業務功能的字串開頭。
  2. 選擇 bean 的水平切片: 如果您遵循一種約定,其中 bean 名稱包含一個字串,指示它們從架構角度的角色,則 bean() 切入點可以根據 bean 的架構角色選擇 bean。 例如,您可以使用 bean(*Repository) 來選擇所有儲存庫 bean,如果 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

獲取 Spring 新聞資訊

透過 Spring 新聞資訊保持聯絡

訂閱

領先一步

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

瞭解更多

獲得支援

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

瞭解更多

即將到來的活動

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

檢視全部