1.springbootのアノテーションを使用してaopを開くのは簡単です
@Aspect @Order(1) @Component
@Aspect:aopを開く、@ Component:スキャンする必要がある、このクラスを有効にする、@ Order:多くのaopが開始されている、これにより構成の順序を調整できます
2.6つの一般的に使用される注釈が含まれます
@Pointcut( "")
エントリポイントを定義します。実行する必要のあるメソッドの代わりにメソッドを定義します。
たとえば、aopでメソッドAをBとCで囲む必要があります。メソッドAを置き換える方法は?代わりにエントリポイントを使用してください。エントリポイントはこのアスペクトメソッドです。
このメソッドを使用すると、aopを実行できます。aopには、メソッドが実行される前、メソッドが実行されるとき、メソッドが実行された後、実行が正常に完了し、例外を除いて実行が完了する順序があります。
対応するメモが5つあり、名前がわかりやすくなっています。
@ Before、@ Around、@ After、@ AfterReturning、@ AfterThrowing
これらのアノテーションの値は、@ Pointcut( "")定義メソッドのパッケージパスです。このエントリポイントでaopを実行しましょう。
問題に注意してください:@Aroundは@Beforeと@Afterを置き換えることができます
3.使用順序
単にすべての注釈をリストし、次のように実行プロセスの順序を確認します。
@ Around-》 @ Before-》 @ After-》 @ AfterReturning-》 @ AfterThrowing
(1)@AroundでreturnのProceedingJoinPoint.proceed()が呼び出されます。このメソッドは数回呼び出され、メソッドは数回実行されます。
@Around(value = "com.fast.framework.aop.pointcut.SystemArchitecture.logPointCut()")
public Object around(ProceedingJoinPoint point) throws Throwable {
logger.info("around");
return point.proceed();
}
テストログを見る
15:37:54.865 INFO com.fast.framework.aop.LogAop 60 around - around
15:37:54.866 INFO com.fast.framework.aop.LogAop 44 before - before
执行切面方法
815:37:55.034 INFO com.fast.framework.aop.LogAop 66 after - after
15:37:55.034 INFO com.fast.framework.aop.LogAop 71 afterReturning - afterReturning
15:37:55.035 INFO com.fast.framework.aop.LogAop 76 afterThrowing - afterThrowing
シーケンス:@ Around-》 @ Before-》エグゼクティブアスペクトメソッド-》 @ After-》 @ AfterReturning-》 @ AfterThrowing
(2)@Aroundメソッド中に呼び出されます
@Around(value = "com.fast.framework.aop.pointcut.SystemArchitecture.logPointCut()")
public Object around(ProceedingJoinPoint point) throws Throwable {
logger.info("around start");
Object proceed = point.proceed();
logger.info("around end");
return proceed;
}
出力ログ
18:40:52.260 INFO com.fast.framework.aop.LogAop 60 around - around start
18:40:52.261 INFO com.fast.framework.aop.LogAop 44 before - before
执行切面方法
818:40:52.413 INFO com.fast.framework.aop.LogAop 62 around - around end
18:40:52.414 INFO com.fast.framework.aop.LogAop 68 after - after
18:40:52.415 INFO com.fast.framework.aop.LogAop 73 afterReturning - afterReturning
18:40:52.415 INFO com.fast.framework.aop.LogAop 78 afterThrowing - afterThrowing
シーケンス:@Around Start-》 @ Before-》アスペクトメソッドの実行-》 @ Around End-》 @ After-》 @ AfterReturning-》 @ AfterThrowing
アラウンドは前に始まり、前に終わっていることがわかります。
4.織り方の情報を入手する
1.JoinPoint
2.ProceedingJoinPoint
3. LocalVariableTableParameterNameDiscovererメソッドパラメーター名の取得:詳細については、https://blog.csdn.net/Mint6/article/details/94991183を参照してください。
JoinPointとProceedingJoinPointはほぼ同じです。いくつかの使用方法については、https://blog.csdn.net/Mint6/article/details/92121845を参照してください。
5.aopの全体的な手順
1234の使用は、上記の手順を指します
1を使用してaopを開きます-" 2を使用してエントリポイント@Pointcut(" ")を定義し、5つの連続した注釈を使用してaopプロセス全体を記述します-" 4を使用してアスペクトメソッド情報を取得し、アスペクトを実行します。
添付ファイル:@Aroundメソッドは手動で戻り値を返し、ProceedingJoinPoint.proceed()またはProceedingJoinPoint.proceed()の実行結果を返す必要がありますが、返す必要があります。そうでない場合、aopはデフォルトでこのメソッドをインターセプトし、戻り値はありません。 。