こんにちは、Spring MVC の学習を開始しました。コードを書くには十分ですが、AOP は理解するのが難しい概念であり、この投稿を既に確認しています。そして、Spring のドキュメントを読みました。説明が素人の言葉ではなく、理解しにくいので、私はまだ混乱していると思います。AOP には、ロギングの一般的な例があります。まだその魂を理解していません。サンプル実装の概念とそれなしの概念を素人の言語で説明してください。良いチュートリアルへのリンクは大歓迎です。この投稿が役に立たないように、長い議論を投稿しないでください。これは説明のみを目的としています。それを使用する利点/欠点は、今のところ無視できます。
1 に答える
定義に関して、アスペクトを見る最も簡単な方法は、単一の式でプロキシ (またはプロキシ) を定義する宣言的な方法だと思います。
不自然な状況:
アプリケーション内の任意のgetter メソッドである「getter」メソッドが呼び出された回数をカウントしたいとします。さて、各「ゲッター」メソッドを個別に見つけて、いくつかの静的カウンターをインクリメントします。それはあなたにとって受け入れられるかもしれませんが、その時点からアプリケーションに追加される各「ゲッター」メソッドに対して同じことを行うことも確認する必要があります。
側面を考えてみましょう:
アスペクトは主に 2 つの要素で構成されています。実行されるコードであるプロキシと、プロキシ コードが適用される場所を示す宣言式。
メソッド呼び出しの前または後に、カウンターを自動的にインクリメントする「ゲッター」用のプロキシを作成できます。このプロキシの問題は、各「getter」メソッドに適用する必要があることです。これは側面が輝くところです。「すべての「getter」メソッドに対してこのプロキシを実行する」という簡単な定義を (お気に入りのアスペクト ライブラリ表現言語を介して) 記述できます。
SpringAOP を使用した例:
@Aspect
public class MyAspect
{
private static int counter = 0;
@Before("execution(* get*())")
public void incrementCounterProxy()
{
counter++;
}
}
例の説明:
アスペクトを取得するために Spring コンテナーですべてを適切にセットアップしたと仮定すると、これは私たちの不自然な目標を達成するはずです。
@Aspect
私たちのクラスを、アスペクトを含む候補のクラスとしてマークします。@Before
プロキシ タイプをマークします。メソッド内のコードは、ターゲット メソッド呼び出しの前にのみ処理を行うプロキシになります。execution(* get*())
は、このプロキシを「get」で始まり、パラメーターを持たないメソッドのすべての実行に適用する宣言式です。