搭配 AspectJ 使用 @Transactional
您也可以藉由 AspectJ 切面在 Spring 容器外部使用 Spring Framework 的 @Transactional
支援。若要這麼做,請先使用 @Transactional
註解您的類別 (以及選擇性地註解您類別的方法),然後將您的應用程式與 spring-aspects.jar
檔案中定義的 org.springframework.transaction.aspectj.AnnotationTransactionAspect
連結 (編織)。您也必須使用交易管理器組態切面。您可以使用 Spring Framework 的 IoC 容器來處理相依性注入切面。組態交易管理切面最簡單的方式是使用 <tx:annotation-driven/>
元素,並將 mode
屬性指定為 aspectj
,如使用 @Transactional
中所述。由於我們在此處著重於在 Spring 容器外部執行的應用程式,因此我們向您展示如何以程式化方式執行此操作。
在繼續之前,您可能想要分別閱讀使用 @Transactional 和AOP。 |
以下範例示範如何建立交易管理器並組態 AnnotationTransactionAspect
以使用它
-
Java
-
Kotlin
// construct an appropriate transaction manager
DataSourceTransactionManager txManager = new DataSourceTransactionManager(getDataSource());
// configure the AnnotationTransactionAspect to use it; this must be done before executing any transactional methods
AnnotationTransactionAspect.aspectOf().setTransactionManager(txManager);
// construct an appropriate transaction manager
val txManager = DataSourceTransactionManager(getDataSource())
// configure the AnnotationTransactionAspect to use it; this must be done before executing any transactional methods
AnnotationTransactionAspect.aspectOf().transactionManager = txManager
當您使用此切面時,您必須註解實作類別 (或該類別中的方法或兩者),而不是類別實作的介面 (如果有的話)。AspectJ 遵循 Java 的規則,即介面上的註解不會被繼承。 |
類別上的 @Transactional
註解指定類別中任何公用方法執行的預設交易語意。
類別內方法上的 @Transactional
註解會覆寫類別註解 (如果存在) 給定的預設交易語意。您可以註解任何方法,無論可見性為何。
若要使用 AnnotationTransactionAspect
編織您的應用程式,您必須使用 AspectJ 建置您的應用程式 (請參閱AspectJ 開發指南) 或使用載入時編織。請參閱Spring Framework 中搭配 AspectJ 的載入時編織,以取得關於搭配 AspectJ 的載入時編織的討論。