Spring-Aopの用途は何ですか?

Spring-Aopの用途は何ですか?

aopがない場合、ログ処理を行うときに、次のような各メソッドにログ処理を追加します。

1

ただし、ほとんどの場合、コードの処理は同じです。コードの再利用を実現するために、ログ処理を新しいメソッドに分離する場合があります。ただし、これらのメソッドを手動で挿入する必要があります。

2

ただし、これら2つの方法は強く結びついています。現時点でこの関数が必要ない場合、または他の関数に変更したい場合は、1つずつ変更する必要があります。

動的エージェントを介して、対応するプロセスを指定された場所で実行できます。このようにして、いくつかの水平関数を抽出して独立したモジュールを形成し、これらの関数を指定された位置に挿入することができます。この種の考え方は、アスペクト指向プログラミングまたはAOPと呼ばれます。

3

指定された場所でこれらの水平機能を実行するには、指定された場所がどこにあるかを知る必要があります

4

たとえば、上の図のメソッドレベルのaop実装では、プログラム実行チェーンで、method2はポイントオブカットと呼ばれます。つまり、クロスカット関数は、method2の実行時に実行され、method2の前または後に実行されます。何?これらはすべてアドバイスによって指定されます。アドバイスには5つのタイプがあります。

通知タイプ 前書き
前(事前通知) ターゲットメソッド呼び出しの前に実行
後(通知後) ターゲットメソッドが呼び出された後に実行します
返品後(返品通知) ターゲットメソッドが正常に実行された後に実行する
投げた後(異常な通知) ターゲットメソッドが例外をスローした後に実行する
周辺(通知周辺) フロントとリアを組み合わせるのと同じです

ポイントカットと通知の組み合わせはアスペクトです。アスペクトは、いつどこでどのメソッドを実行するかを指定します。次のように春のaopでこの側面を定義します。


   
    
    
  1. @側面
  2. @成分
  3. パブリック クラスUserAspect {
  4. @Before "execution(* com.aop.service.impl.UserServiceImpl.login(..))"
  5. public void loginLog () {
  6. システムが.outの.println"ユーザーログインを");
  7. }
  8. }

注釈@Aspectを使用して、特定のクラスをアスペクトとして宣言します。これにより、このクラスの下のメソッドを水平関数ポイントとして宣言し、指定された位置に挿入できます。実行式を使用して、この連絡先で宣言します。形式は次のとおりです。 5

最初の位置はメソッドの戻り値を指定します。*記号は任意のタイプの戻り値を表し、次にそれが配置されているクラスとメソッド名を表します。*記号はクラス内の任意のメソッドも表します。前の例では、メソッド名loginの場合、このクラスのloginメソッドを指定します。次に、javaはオーバーロードをサポートしているため、最後のパラメーターはメソッド入力です。このパラメーターは、より正確に検索するのに役立ちます。2つのポイントは、任意のパラメータータイプを示します。このようにして、実行式はプログラムに通知を実行する場所を指示します。@Beforeなどの注釈によって変更されたメソッドは、通知の内容、つまり何をするかです。

この時点で、spring aopを使用できますが、さらに2つの注意点があります。

  1. アスペクトクラスをBeanとして宣言します
  2. ポイントカットで指定されたメソッドが配置されているクラスも、有効にするにはスプリングで注入する必要があります

継続的に更新しています...

おすすめ

転載: blog.csdn.net/weixin_44325444/article/details/106477118