我解釋一下(* com.evan.crm.service.*.*(..))中幾個通配符的含義:
|第一個 * —— 通配 任意返回值類型|
|第二個 * —— 通配 包com.evan.crm.service下的任意class|
|第三個 * —— 通配 包com.evan.crm.service下的任意class的任意方法|
|第四個 .. —— 通配 方法可以有0個或多個參數|
包com.evan.crm.service下的任意class的具有任意返回值類型、任意數目參數和任意名稱的方法
"execution(* cn..chapter9.service..*.*(..))"表示攔截cn包及子包下的chapter9. service包及子包下的任何類的任何方法;
" execution(* *..mo..*.*(..))"表示攔截所有包及其子包下的mo包及子包下的任意類的任意方法
<tx:advice/>
- <tx:advice>:id用於指定此通知的名字, transaction-manager用於指定事務管理器,默認的事務管理器名字為“transactionManager”;
- <tx:method>:用於定義事務屬性即相關聯的方法名;
name:定義與事務屬性相關聯的方法名,將對匹配的方法應用定義的事務屬性,可以使用“*”通配符來匹配一組或所有方法,如“save*”將匹配以save開頭的方法,而“*”將匹配所有方法;
propagation:事務傳播行為定義,默認為“REQUIRED”,表示Required,其值可以通過TransactionDefinition的靜態傳播行為變量的“PROPAGATION_”后邊部分指定,如“TransactionDefinition.PROPAGATION_REQUIRED”可以使用“REQUIRED”指定;
isolation:事務隔離級別定義;默認為“DEFAULT”,其值可以通過TransactionDefinition的靜態隔離級別變量的“ISOLATION_”后邊部分指定,如“TransactionDefinition. ISOLATION_DEFAULT”可以使用“DEFAULT”指定:
timeout:事務超時時間設置,單位為秒,默認-1,表示事務超時將依賴於底層事務系統;
read-only:事務只讀設置,默認為false,表示不是只讀;
rollback-for:需要觸發回滾的異常定義,以“,”分割,默認任何RuntimeException 將導致事務回滾,而任何Checked Exception 將不導致事務回滾;異常名字定義和TransactionProxyFactoryBean中含義一樣
no-rollback-for:不被觸發進行回滾的 Exception(s);以“,”分割;異常名字定義和TransactionProxyFactoryBean中含義一樣;