Spring-Aopの用途は何ですか?
aopがない場合、ログ処理を行うときに、次のような各メソッドにログ処理を追加します。
ただし、ほとんどの場合、コードの処理は同じです。コードの再利用を実現するために、ログ処理を新しいメソッドに分離する場合があります。ただし、これらのメソッドを手動で挿入する必要があります。
ただし、これら2つの方法は強く結びついています。現時点でこの関数が必要ない場合、または他の関数に変更したい場合は、1つずつ変更する必要があります。
動的エージェントを介して、対応するプロセスを指定された場所で実行できます。このようにして、いくつかの水平関数を抽出して独立したモジュールを形成し、これらの関数を指定された位置に挿入することができます。この種の考え方は、アスペクト指向プログラミングまたはAOPと呼ばれます。
指定された場所でこれらの水平機能を実行するには、指定された場所がどこにあるかを知る必要があります
たとえば、上の図のメソッドレベルのaop実装では、プログラム実行チェーンで、method2はポイントオブカットと呼ばれます。つまり、クロスカット関数は、method2の実行時に実行され、method2の前または後に実行されます。何?これらはすべてアドバイスによって指定されます。アドバイスには5つのタイプがあります。
通知タイプ | 前書き |
---|---|
前(事前通知) | ターゲットメソッド呼び出しの前に実行 |
後(通知後) | ターゲットメソッドが呼び出された後に実行します |
返品後(返品通知) | ターゲットメソッドが正常に実行された後に実行する |
投げた後(異常な通知) | ターゲットメソッドが例外をスローした後に実行する |
周辺(通知周辺) | フロントとリアを組み合わせるのと同じです |
ポイントカットと通知の組み合わせはアスペクトです。アスペクトは、いつどこでどのメソッドを実行するかを指定します。次のように春のaopでこの側面を定義します。
-
@側面
-
@成分
-
パブリック
クラスUserAspect
{
-
-
@Before
( "execution(* com.aop.service.impl.UserServiceImpl.login(..))")
-
public void loginLog ()
{
-
システムが.outの.println("ユーザーログインを");
-
}
-
-
}
注釈@Aspectを使用して、特定のクラスをアスペクトとして宣言します。これにより、このクラスの下のメソッドを水平関数ポイントとして宣言し、指定された位置に挿入できます。実行式を使用して、この連絡先で宣言します。形式は次のとおりです。
最初の位置はメソッドの戻り値を指定します。*記号は任意のタイプの戻り値を表し、次にそれが配置されているクラスとメソッド名を表します。*記号はクラス内の任意のメソッドも表します。前の例では、メソッド名loginの場合、このクラスのloginメソッドを指定します。次に、javaはオーバーロードをサポートしているため、最後のパラメーターはメソッド入力です。このパラメーターは、より正確に検索するのに役立ちます。2つのポイントは、任意のパラメータータイプを示します。このようにして、実行式はプログラムに通知を実行する場所を指示します。@Beforeなどの注釈によって変更されたメソッドは、通知の内容、つまり何をするかです。
この時点で、spring aopを使用できますが、さらに2つの注意点があります。
- アスペクトクラスをBeanとして宣言します
- ポイントカットで指定されたメソッドが配置されているクラスも、有効にするにはスプリングで注入する必要があります
継続的に更新しています...