ホームページ >Java >&#&チュートリアル >Springの詳細説明 - AOP詳細説明(AOP概要)

Springの詳細説明 - AOP詳細説明(AOP概要)

(*-*)浩
(*-*)浩転載
2019-09-11 16:33:112029ブラウズ

1. AOP の第一印象

Springの詳細説明 - AOP詳細説明(AOP概要)

最初に比較的専門的な用語を説明します (Baidu より) :

在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一
维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利
用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效
率。

最後に、より理解しやすい例を示します。

アスペクト プログラミングを理解するには、まずアスペクトとは何かを理解する必要があります。スイカを包丁で半分に割るときの切り口が切断面であり、調理するときは鍋とコンロが連携して調理が完了し、鍋とコンロが切断面になります。 Web層の設計では、Web層→ゲートウェイ層→サービス層→データ層の各層もアスペクトとなります。プログラミングでは、オブジェクト、メソッドとメソッド、およびモジュールの間に側面があります。

通常、アクティビティを実行するときは、各インターフェイスのアクティビティの有効性 (開始するかどうか、終了するかどうかなど)、およびこのインターフェイスがユーザーのログインを必要とするかどうかを確認します。

通常のロジックによれば、これを行うことができます。

Springの詳細説明 - AOP詳細説明(AOP概要)

問題は、インターフェイスの数と同じだけコードのコピーが必要になることです。 「怠け者」にとって、これは耐えられないことです。 OK、パブリック メソッドを提案すると、すべてのインターフェイスがこのインターフェイスを呼び出します。こちらは少し細麺の風味が感じられます。

Springの詳細説明 - AOP詳細説明(AOP概要) これも問題です。毎回コードをコピーする必要はありませんが、すべてのインターフェイスでこのメソッドを呼び出す必要があります。そこでアスペクトという概念があり、インターフェイス呼び出しのどこかにメソッドを注入します(ポイントカット)。

Springの詳細説明 - AOP詳細説明(AOP概要)このように、インターフェイスは特定のビジネスのみを考慮する必要があり、インターフェイスに関係のない他のロジックや処理に注意を払う必要はありません。

赤いボックスはアスペクト指向プログラミングです。

2. AOP の関連概念

上記の例を読んだ後、誰もがすでに AOP の大まかなプロトタイプを頭の中に持っていると思いますが、実際には次のようなものもあります。次に、AOP の関連する概念について説明します。AOP の概念を理解することによってのみ、AOP の本質を真に理解することができます。

概念のより専門的な定義は次のとおりです:

アスペクト: アスペクト宣言は Java のクラス宣言に似ており、いくつかのポイントカットとアスペクトに含まれます。対応するアドバイス。

ジョイント ポイント: プログラム内で明確に定義されたポイントを表します。通常、メソッドの呼び出し、クラス メンバーへのアクセス、例外処理ブロックの実行などが含まれます。他のジョイント ポイントをネストすることもできます。

Pointcut: ジョイント ポイントのセットを表します。これらのジョイント ポイントは、論理関係によって結合されるか、ワイルドカードや正規表現などによって集中されます。これは、対応するアドバイスが発生する場所を定義します。

アドバイス (拡張): アドバイスは、Pointcut で定義されたプログラム ポイントによって実行される特定の操作を定義します。コードが各ジョイント ポイントの前、後、またはその代わりに実行されるかどうかを区別するために、before、after、around を使用します。 . .

Target (ターゲット オブジェクト): アドバイスに組み込まれたターゲット オブジェクト。

Weaving: Aspect を他のオブジェクトに接続し、Advised オブジェクトを作成するプロセス

#次に、わかりやすい例を示します:

After上記の理論的知識を読んでも、多くの友人は AOP の概念がまだ漠然としていて、AOP のさまざまな概念を完全に理解していないと感じていると思います。実際、AOP の概念はあまり明確ではないため、これは正常なことです。非常に多くの概念があるため、それらを整理するのに多大な労力がかかりました。

簡単な例を使用して、AOP におけるアスペクト、ジョイント ポイント、ポイントカット、アドバイスの関係を比較してみましょう。

むかしむかし、ジャワという小さな郡があったとします。ある暗い嵐の夜、この郡で殺人事件が発生しました。殺人者は非常に狡猾で、現場には追跡可能なものは何もありませんでした。幸いなことに、 , 隣から戻ってきたばかりのラオ・ワンは、この時、偶然にも殺人者の殺害過程を発見しましたが、時間が遅かったことと、殺人者が覆面をしていたため、ラオ・ワンには殺人者の顔をはっきりと見ることができませんでした。ラオ・ワンの説明によると、ジャワ郡の治安判事は、門を守る兵士たちに「身長7フィート5インチの男は逮捕され、尋問されなければならない」と命令を出した。都市に出入りするすべての有資格者を逮捕してください。

上記の短編小説と、AOP が通信についてどのようなものかを見てみましょう。

まず、Spring AOP では、ジョイント ポイントはすべてのメソッドの実行ポイントを指し、ポイント カットはジョイント ポイントを変更する記述情報であることがわかります。上の例に対応して、簡単な類推ができます。ジョイントポイントはジャワの小さな郡の人々に相当し、ポイントカットは老王による告発に相当します。殺人者は男性で、身長は約 7 フィート 5 インチで、Lao Wang の説明に一致する容疑者の行動にアドバイスが適用されました。尋問のために彼を逮捕します。

なぜこの類似が可能ですか?

ジョイント ポイント: Java の小さな郡町の人々: 定義によれば、ジョイント ポイントはアドバイスに織り込まれる可能性のあるすべての候補ポイントであるため、Spring AOP ではすべてのメソッド実行ポイントが考慮されます。上の例では、殺人事件は小さな郡で発生しました。この郡の全員が容疑者である可能性があるのは当然です。

ポイントカット: 男性、身長約 7 フィート 5 インチ:アドバイスはすべてのメソッド (ジョイント ポイント) に織り込むことができることはわかっていますが、すべてのメソッドにアドバイスを織り込みたくはありません。Pointcut の役割は、ジョインポイントに一致する一連のルールを提供し、条件を満たすジョインポイントにアドバイスを追加することです。同様に、郡判事にとっても、たとえ彼がどれほど愚かであっても、尋問のために郡内のすべての人々を逮捕することはできないことを知っています。代わりに、彼は殺人者が犯罪者であるという事実に基づいて条件を満たす人々を逮捕する必要があります。男性で、身長は約 7 フィート 5 インチです。ここで殺人者です。彼は男性で、身長は約 7 フィート 5 インチです。これは修飾述語です。殺人者の範囲を制限します。この修飾ルールを満たす人は次のとおりです。

アドバイス: 逮捕され、尋問されます。アドバイスはアクション、つまり Java コードの一部です。この Java コードは、ポイント カットによって定義されたジョイント ポイントに作用します。同様に、私たちの例と比較すると、尋問のために掴むという行為は、男性を満足させる人々、つまりジャワの小さな田舎町に住む、身長約 7 フィート 5 インチの人々に作用します。

アスペクト::アスペクトは「ラオ・ワンの手がかりによると、身長 7 フィート 5 インチの男が見つかったら、彼は逮捕され、尋問されるでしょう。」 この行動全体が可能です。

#最後に、これらの概念間の関係を説明する図があります:

Springの詳細説明 - AOP詳細説明(AOP概要)3. その他の内容

AOP のジョインポイントには、コンストラクター メソッドの呼び出し、フィールドの設定と取得、メソッドの呼び出し、メソッドの実行、例外処理と実行、クラスの初期化など、さまざまな種類があります。つまり、AOP の概念では、カスタム アドバイスを上記のジョインポイントに組み込むことができますが、上記のジョインポイントのすべてが Spring に実装されているわけではなく、正確に言うと、Spring はメソッド実行タイプのジョインポイントのみをサポートしています。

アドバイスの種類

before アドバイス、ジョイン ポイントより前に実行されるアドバイス before アドバイスはジョイン ポイントより前に実行されますが、ジョイン ポイントの実行を防ぐことはできません例外が発生しない限り (つまり、アドバイス前のコードでは、ジョイン ポイントでコードの実行を継続するかどうかを人為的に決定することはできません)

アドバイスを返した後、ジョイン ポイントが通常どおりアドバイスを返した後に実行されます

アドバイスをスローした後、ジョイン ポイントが例外をスローしたときにアドバイスが実行されます。

(最後の) アドバイスの後は、ジョイン ポイントが正常に終了したか例外が発生したかに関係なく、アドバイスが実行されます。

周りのアドバイス、結合ポイントの前と結合ポイントの終了後に実行されるアドバイス。これは最も一般的に使用されるアドバイスです。

導入、導入では、元のオブジェクトに新しいオブジェクトを追加できます。プロパティとメソッド。

以上がSpringの詳細説明 - AOP詳細説明(AOP概要)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。