1.依存紹介
<依存性> <のgroupId> org.springframework.boot </のgroupId> <たartifactId>ばねブートスタータAOP </たartifactId> </依存>
2.書き込みJava構成
パッケージcn.rivamed.framework.common.configを。 輸入org.aspectj.lang.annotation.Aspect; 輸入org.springframework.aop.Advisor; 輸入org.springframework.aop.aspectj.AspectJExpressionPointcut; 輸入org.springframework.aop.support.DefaultPointcutAdvisor; 輸入org.springframework.beans.factory.annotation.Autowired; 輸入org.springframework.context.annotation.Bean; 輸入org.springframework.context.annotation.Configuration。 輸入org.springframework.transaction.PlatformTransactionManager; 輸入org.springframework.transaction.TransactionDefinition。 インポートorg.springframework.transaction.annotation.EnableTransactionManagement; 輸入org.springframework.transaction.interceptor.DefaultTransactionAttribute; 輸入org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource。 輸入org.springframework.transaction.interceptor.TransactionInterceptor; @Aspect @Configuration @EnableTransactionManagement パブリック クラスTransactionConfig { プライベート 静的な 最終文字列ASPECTJ_EXPRESSION = "実行(* cn.rivamed..service .. *サービス* *(..)。)" ; @Autowired プライベートPlatformTransactionManagerのTransactionManager。 @Bean 公共TransactionInterceptor txAdvice(){ DefaultTransactionAttribute txAttr_REQUIRED = 新しいDefaultTransactionAttribute()。 txAttr_REQUIRED.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED)。 DefaultTransactionAttribute txAttr_REQUIRED_READONLY = 新しいDefaultTransactionAttribute(); txAttr_REQUIRED_READONLY.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED)。 txAttr_REQUIRED_READONLY.setReadOnly(真の); NameMatchTransactionAttributeSource源は = 新しいNameMatchTransactionAttributeSourceを(); source.addTransactionalMethod( "*保存" 、txAttr_REQUIRED)。 source.addTransactionalMethod( "削除*" 、txAttr_REQUIRED)。 source.addTransactionalMethod( "更新*" 、txAttr_REQUIRED)。 source.addTransactionalMethod( "EXEC *" 、txAttr_REQUIRED)。 // source.addTransactionalMethod( "セット*"、txAttr_REQUIRED)。 // source.addTransactionalMethod( "取得*"、txAttr_REQUIRED_READONLY)。 // source.addTransactionalMethod( "クエリ*"、txAttr_REQUIRED_READONLY)。 // source.addTransactionalMethod( "*見つけます"、 txAttr_REQUIRED_READONLY); // source.addTransactionalMethod( "リスト*"、txAttr_REQUIRED_READONLY)。 // source.addTransactionalMethod( "カウント*"、txAttr_REQUIRED_READONLY)。 // source.addTransactionalMethod(txAttr_REQUIRED_READONLY、 "*です"); 返す 新しいTransactionInterceptor(TransactionManagerと、ソース)。 } @Bean 公共アドバイザtxAdviceAdvisor(){ AspectJExpressionPointcutポイントカット = 新しいAspectJExpressionPointcut()。 pointcut.setExpression(ASPECTJ_EXPRESSION)。 リターン 新しいDefaultPointcutAdvisor(ポイントカット、txAdvice()); } }
3.セクションのディレクトリ構造
4.executionは理解して
"実行(* cn.rivamed..service .. *サービス*。*(..))"
実行():式ボディ。
最初のアスタリスク:表が示すように返すタイプ、アスタリスクのテーブルショーのすべてのタイプを。
パッケージ名:後者の二つの期間は、現在のパッケージおよびすべてのサブパッケージの現在のパッケージを表し、パッケージ名を傍受する必要性を示します
2番目のアスタリスクは、:*サービス*意味は、パッケージの下にあるすべてのクラスのサービスが含まれている、クラス名を示します。
*(..):この最後のアスタリスクは、メソッド名は、アスタリスクは括弧内のすべての方法のバックはメソッドのパラメータを表し示し、二つの期間は、任意のパラメータを示しています
5. @トランザクション注釈
@Transactional(rollbackOn = Exception.class)和@Transactional(rollbackFor = Exception.class)含义相同