AOPの性質又は動的プロキシメソッド呼び出しが向上します。
SpringBootは便利な注釈がカスタム側面アスペクトを実装しています。
1、あなたが知っている必要がありますいくつかの概念を使用します:
アスペクト@節、
カットオフポイント、ポイントカット@、
通知、@の前に/ @の後に/ @アラウンド/ @ AfterReturning / @ AfterThrowing
2、ポイントカット式の式の規則
ポイントカットは、これらのメソッドは、「AOP」を実行する必要があり、記述するための「ポイントカット表現」である。
ポイントカットは、次のように定義されるか、またはワイルドカードですることができ&& || 、および!ウェイの組み合わせ。
引数()、@ argsを()
実行()
この()
ターゲット()、@ターゲット()
内の()、@内の()
@Annotation
たとえば、次の
パブリックメソッドを実行:
実行(パブリック*(..))
:任意の方法が行われ、 "セット"で始まり、
「実行(SET * *(..))
任意AccountServiceのインタフェースを行う方法:
実行(com.xyz.service.AccountService *(..))。
:サービスパッケージのいずれかに定義されたメソッドの実行
が実行される(com.xyz.service * * *(..)..)を
バッグの任意およびすべてのサブパケットのサービスクラスで定義されている任意の方法で実行します
(。com.xyz.service .. * * *(..))の実行を
任意のpointcutexp JoinPointObjP2クラスとバッグのすべてのサブパケットで定義されたメソッドの実行:
実行される(com.test.spring.aop.pointcutexp..JoinPointObjP2 * *(..)。)「)
***>(最も近いです。 。)メソッド名、及び近い。*(..))JoinPointObjP2の実施例として、クラスまたはインタフェース名の名前です。*(..))
あらゆるタイプのバッグをpointcutexp。
(com.test.spring.aop.pointcutexp。*)以内
すべてのパッケージとサブバッグのいずれかのタイプをpointcutexp。
(com.test.spring.aop.pointcutexp .. *)以内
クラス実装INTFすべてのインターフェイス、もし単一のクラスを定義しないINTF INTFインターフェイス。
この(com.test.spring.aop.pointcutexp.Intf)
***>場合クラスその実装インタフェース場合getBeanとAOPメソッドは、インターフェイスタイプではなく、クラスの型にキャストする必要があります。
ラベル@Transactional。とのすべてのクラスのいずれかの方法
@Within(org.springframework.transaction.annotation.Transactional)
@Target(org.springframework.transaction.annotation.Transactional)
でマークされた任意の方法@Transactional。
@Annotation(org.springframework.transaction.annotation.Transactional)
注釈は方法のための注釈です@ ***>、クラスのノートを@withinと@target
@Transactional方法でマークされたパラメータ。
@args(org.springframework.transaction.annotation.Transactional)
パラメータ文字列型(実行の決定)方法。
Argsの(文字列)
この記事はよく書かれているを参照することができます:https://www.jianshu.com/p/fbbdebf200c9