この記事では、Springboot ProjectでAOPを使用する方法を紹介します。私はあなたとそれを共有します。詳細は次のとおりです。
1。概要
一般的なロジックを使用してAOPテクノロジーを実装すると、署名検証、認証などのプログラムの執筆を大幅に簡素化できます。Springの宣言的トランザクションもAOPテクノロジーを通じて実装されます。
特定のコードについては、プロジェクトの例を参照してくださいhttps://github.com/qihaiyan/springcamp/tree/master/spring-aop
SpringのAOPテクノロジーには4つのコアコンセプトがあります。
PointCut:ポイントカット、実行される方法を定義するために使用されます。たとえば、実行(*cn.springcamp.springaop.service。
アドバイス:メソッドを傍受した後に実行されるアクション
アスペクト:スライス、ポイントカットとアドバイスを組み合わせてカット面を形成する
結合ポイント:実行中のポイントカットのインスタンス
Weaver:AspectJやSpring AOPなどのAOPを実装するためのフレームワーク
2。定義ポイント定義
一般的に使用されるポイントカット定義には、実行と@Annotationが含まれます。実行はメソッドを定義し、比較的一般的なセクションを実装するために使用されます。 @Annotationは、Springのトランザクション注釈などの特定の方法への注釈として追加できます。
実行ポイントカット定義は、ポイントカット定義を中央に管理するために、パブリッククラスに配置する必要があります。
例:
public class commonjoinpointconfig {@pointcut( "execution(*cn.springcamp.springaop.service。*。*(..)")public void servicelayerexecution(){}}}このようにして、特定のアスペクトクラスでは、CommonJoinPointConfig.ServicelAyerexecution()を介して接線点を参照できます。
public class beforeaspect {@before( "commonjoinpointconfig.servicelayerexecution()")public void before(joinpoint joinpoint){system.out.println( "--------------> before aspect"); system.out.println( "----------------->" + joinpoint); }}接線点を変更する必要がある場合、各アスペクトクラスを変更せずに、CommonJoinPointConfigクラスを変更するだけです。
3.一般的に使用されるフェイスカット
前:メソッドが実行される前にアドバイスを実行します。これは、署名検証、認証などによく使用されます。
後:実行が完了した後、実行が成功したか、例外がスローされているかどうかにかかわらず、実行します。
AfterReturning:メソッドの実行が成功した後にのみ実行します。
後投げ:メソッド実行が例外をスローした後にのみ実行します。
簡単な側面:
@aspeed @componentPublic class beforeaspect {@before( "commonjoinpointconfig.servicelayerexecution()")public void before(joinpoint joinpoint){system.out.println( "--------------> asection"); system.out.println( "--------------->" + joinpoint); }}4。カスタムアノテーション
特定の方法の実行時間を収集する必要があるとしますが、より合理的な方法は、注釈をカスタマイズし、実行時間を収集する必要がある方法にこの注釈を追加することです。
最初に注釈のトラックタイムを定義します。
@target({elementType.Method、elementType.Type}) @RETENTION(RETENTIONPOLICY.RUNTIME)public @Interface TrackTime {String Param()Default "";}次に、アスペクトクラスを定義して、注釈の動作を実装します。
@asdey@componentpublic class tracktimeaspect {@around( "@annotation(tracktime)")パブリックオブジェクト(ProceingjoinPoint JoinPoint、TrackTime TrackTime)Throws {Object result = null; long starttime = system.currenttimemillis(); result = joinpoint.proceed(); long timetaken = system.currenttimemillis() - starttime; system.out.println( "--------------> param [" + tracktime.param() + "]を使用して" + joinpoint + "が撮影する時間は" + timetaken);返品結果; }}メソッドでこの注釈を使用することにより、このメソッドの実行時間を収集できます。
@tracktime(param = "myservice")public string runfoo(){system.out.println( "----------------> foo"); 「foo "を返します;}@TrackTime(PARAM = "myService")注釈を渡すことができることに注意してください。
アノテーションがパラメーターを渡すために、アノテーションを定義するときにパラメーター文字列param()デフォルト「デフォルト」を指定する必要があります。
同時に、アスペクトクラスでは、対応するパラメーターがAuffun Methodに追加されます。パラメーターの変数名は、@Aroundアノテーションのトラックタイムである必要がありますが、クラス名トラックタイムではありません。
@around( "@annotation(tracktime)")パブリックオブジェクトの周り(ProceingJoinPoint JoinPoint、TrackTime TrackTime)
5。概要
サンプルプロジェクトを実行するとき、コンソールは次のものを出力します。
---------------->アスペクト前
-------------->実行の実行前(String Cn.springcamp.springaop.service.myservice.runfoo())
---------------> foo
--------------->実行による時間(String cn.springcamp.springaop.service.myservice.runfoo())with param [myservice]は8です。
--------------->アスペクト後
------------->実行後(String Cn.springcamp.springaop.service.myservice.runfoo()))
--------------->アフタートーリングの側面
----------------> execution(String Cn.SpringCamp.springaop.service.myservice.runfoo())Value fooで返されます
いくつかの側面の実行命令は、後退した後(後投げ)後にあることがわかります
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。