Spring中萬用字元問題

2022-09-15 23:51:19 字數 4079 閱讀 5864

一、載入路徑中的萬用字元

(1)?(匹配單個字元)

(2)*(匹配除/外任意字元)

(3)**/(匹配任意多個目錄)

示例:

1

說明:無萬用字元,必須完全匹配

(3)classpath:user/*/base-beans.xml

說明:匹配零個或多個字串(只針對名稱,不匹配目錄分隔符等),例如:user/a/base-beans.xml 、 user/b/base-beans.xml ,但是不匹配 user/base-beans.xml

(4)classpath:user/**/base-beans.xml

說明:匹配路徑中的零個或多個目錄,例如:user/a/ab/abc/base-beans.xml,同時也能匹配 user/base-beans.xml

(5)classpath:**/*-beans.xml

說明:表示在所有的類路徑中查詢和載入檔名以「-beans.xml」結尾的配置檔案,但重複的檔名只載入其中乙個,視載入順序決定

(6)classpath*:user/**/*-beans.xml

classpath*:**/*-beans.xml

二、包掃瞄路徑

(1)(2)

(3)說明:「**」標示不確定層包通配,即只掃瞄dao包(中間有不確定層包)

(4)說明:「*dao」以dao結尾的包通配,即只掃瞄以「dao」結尾的包

三、spring aop配置萬用字元

以下文件來自spring中文開發指南2.5文件,由滿江紅開源組織翻譯:

spring aop 使用者可能會經常使用execution切入點指示符。執行表示式的格式如下:

execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern)

throws-pattern?)

除了返回型別模式(上面**片斷中的ret-type-pattern),名字模式和引數模式以外, 所有的部分都是可選的。

返回型別模式決定了方法的返回型別必須依次匹配乙個連線點。 你會使用的最頻繁的返回型別模式是*,它代表了匹配任意的返回型別。 乙個全限定的型別名將只會匹配返回給定型別的方法。

名字模式匹配的是方法名。 你可以使用*萬用字元作為所有或者部分命名模式

引數模式稍微有點複雜:()匹配了乙個不接受任何引數的方法, 而(..)匹配了乙個接受任意數量引數的方法(零或者更多)。 模式(*)匹配了乙個接受乙個任何型別的引數的方法。 模式(*,string)匹配了乙個接受兩個引數的方法,第乙個可以是任意型別, 第二個則必須是string型別。更多的資訊請參閱aspectj程式設計指南中語言語義的部分。

下面給出一些通用切入點表示式的例子。

(1)任意公共方法的執行:

execution(public * *(..))

(2)任何乙個名字以「set」開始的方法的執行:

execution(* set*(..))

(3)accountservice介面定義的任意方法的執行:

execution(* com.xyz.service.accountservice.*(..))

(4)在service包中定義的任意方法的執行:

execution(* com.xyz.service.*.*(..))

(5)在service包或其子包中定義的任意方法的執行:

execution(* com.xyz.service..*.*(..))

(6)在service包中的任意連線點(在spring aop中只是方法執行):

within(com.xyz.service.*)

(7)在service包或其子包中的任意連線點(在spring aop中只是方法執行):

within(com.xyz.service..*)

(8)實現了accountservice介面的**物件的任意連線點 (在spring aop中只是方法執行):

this(com.xyz.service.accountservice)

'this'在繫結表單中更加常用:- 請參見後面的通知一節中了解如何使得**物件在通知體內可用。

(9)實現accountservice介面的目標物件的任意連線點 (在spring aop中只是方法執行):

target(com.xyz.service.accountservice)

'target'在繫結表單中更加常用:- 請參見後面的通知一節中了解如何使得目標物件在通知體內可用。

(10)任何乙個只接受乙個引數,並且執行時所傳入的引數是serializable介面的連線點(在spring aop中只是方法執行)

args(j**a.io.serializable)

'args'在繫結表單中更加常用:- 請參見後面的通知一節中了解如何使得方法引數在通知體內可用。

請注意在例子中給出的切入點不同於execution(* *(j**a.io.serializable)): args版本只有在動態執行時候傳入引數是serializable時才匹配,而execution版本在方法簽名中宣告只有乙個serializable型別的引數時候匹配。

(11)目標物件中有乙個@transactional註解的任意連線點 (在spring aop中只是方法執行)

@target(org.springframework.transaction.annotation.transactional)

'@target'在繫結表單中更加常用:- 請參見後面的通知一節中了解如何使得註解物件在通知體內可用。

(12)任何乙個目標物件宣告的型別有乙個@transactional註解的連線點 (在spring aop中只是方法執行):

@within(org.springframework.transaction.annotation.transactional)

'@within'在繫結表單中更加常用:- 請參見後面的通知一節中了解如何使得註解物件在通知體內可用。

(13)任何乙個執行的方法有乙個@transactional註解的連線點 (在spring aop中只是方法執行)

@annotation(org.springframework.transaction.annotation.transactional)

'@annotation'在繫結表單中更加常用:- 請參見後面的通知一節中了解如何使得註解物件在通知體內可用。

(14)任何乙個只接受乙個引數,並且執行時所傳入的引數型別具有@classified註解的連線點(在spring aop中只是方法執行)

@args(com.xyz.security.classified)

'@args'在繫結表單中更加常用:- 請參見後面的通知一節中了解如何使得註解物件在通知體內可用。

(15)任何乙個在名為'tradeservice'的spring bean之上的連線點 (在spring aop中只是方法執行)。

bean(tradeservice)

(16)任何乙個在名字匹配萬用字元表示式'*service'的spring bean之上的連線點 (在spring aop中只是方法執行)

bean(*service)

spring中的萬用字元

一 載入路徑中的萬用字元 匹配單個字元 匹配除 外任意字元 匹配任意多個目錄 說明 無萬用字元,必須完全匹配 classpath user base beans.xml 說明 匹配零個或多個字串 只針對名稱,不匹配目錄分隔符等 例如 user a base beans.xml user b base...

Spring中classpath中萬用字元號的使用

說明 無萬用字元,必須完全匹配 classpath user base beans.xml 說明 匹配零個或多個字串 只針對名稱,不匹配目錄分隔符等 例如 user a base beans.xml user b base beans.xml 但是不匹配 user base beans.xml cl...

spring萬用字元jar資源載入問題

jar資源載入問題 環境 eclipse使用 匯出 jar時未選擇 add directory entries 選擇後,不會出現此問題 如下圖 分析 resource org.springframework.core.io.support.pathmatchingresourcepatternres...