[解決済み] Spring AOP: JoinPointとPointCutの違いは何ですか?
質問
アスペクト指向プログラミングの概念とSpring AOPを学んでいます。私はPointcutとJoinpointの違いを理解できていません。私にとってどちらも同じように思えます。Pointcutはアドバイスを適用する場所であり、Joinpointもアドバイスを適用する場所だと思います。では、何が違うのでしょうか?
ポイントカットの例としては、次のようなものがあります。
@Pointcut("execution(* * getName()")
ジョインポイントの例としては、どのようなものがありますか?
どのように解決するのですか?
ジョインポイントです。 ジョインポイントは 候補 の点です。 プログラムの実行 で、アスペクトをプラグインすることができます。このポイントは、呼び出されるメソッド、スローされる例外、あるいは変更されるフィールドである可能性があります。これらは、アスペクトのコードが新しい動作を追加するためにアプリケーションの通常のフローに挿入できるポイントです。
アドバイスです。 これは、ポイントで指定されたジョインポイントで実行するアクションを表す、システム全体の懸念に対するAPI呼び出しを含むオブジェクトです。
ポイントカットです。 ポイントカットは、関連するアドバイスが適用されるべきジョインポイントを定義します。AdviceはAOPフレームワークでサポートされている任意の結合点で適用することができます。もちろん、すべてのアスペクトをすべての可能なジョインポイントで適用したいわけではありません。ポイントカットを使用すると、アドバイスを適用したい場所を指定することができます。多くの場合、明示的なクラス名とメソッド名を使用して、または一致するクラス名とメソッド名のパターンを定義する正規表現を通じて、これらのポイントカットを指定します。いくつかのAOPフレームワークでは、メソッドパラメータの値などの実行時の決定に基づいてアドバイスを適用するかどうかを決定する動的なポイントカットを作成することができます。
次の画像は、Advice、PointCut、Joinpointsを理解するのに役立ちます。
レストランに例えて説明します。 ソース:@Victor
レストランに出かけると、メニューを見て、いくつかの選択肢から選ぶことができます。メニューの中から1つ、または複数の商品を注文することができます。しかし、実際に注文するまでは、それらは「食事をする機会」に過ぎません。注文して、ウェイターがテーブルに運んできたら、それは食事なのです。
ジョインポイントはメニューのオプションで、ポイントカットは選択するアイテムです。
ジョインポイントはアスペクトを適用するためのコード内の機会です...単なる機会です。その機会を利用して、1つまたは複数のJoinpointを選択し、それらにアスペクトを適用すると、Pointcutが得られます。
出典 Wiki :
<ブロッククオートA ジョインポイント とは、プログラムの制御フローの中で、制御フローが を経由して到着することができます。 2つの異なるパス (IMO : そのために を呼び出す理由です)。
アドバイス 他の関数を変更する関数のクラスを記述しています。
A ポイントカット は、一致する P のパターンであり、ジョインポイントの集合である。
関連
-
[解決済み] Spring Data JPAにおけるCrudRepositoryとJpaRepositoryのインターフェースの違いは何ですか?
-
[解決済み] Springのセキュリティ認証の例外を@ExceptionHandlerで処理する
-
[解決済み] java:comp/env/は何をするところですか?
-
[解決済み] Spring Boot JPA - 自動再接続の設定
-
[解決済み] Spring CrudRepositoryで大文字小文字を区別しないクエリ
-
[解決済み] Maven依存性 spring-webとspring-webmvcの比較
-
[解決済み] Spring BeanPostProcessorは具体的にどのように動作するのですか?
-
[解決済み] Spring BootとMongoDBへの接続設定方法
-
[解決済み] Spring Securityをセッションなしで使用するにはどうすればよいですか?
-
[解決済み] Spring CORS 'Access-Control-Allow-Origin' ヘッダが存在しない。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Springのセキュリティ認証の例外を@ExceptionHandlerで処理する
-
[解決済み] java:comp/env/は何をするところですか?
-
[解決済み] Spring Dataです。"delete by "はサポートされていますか?
-
[解決済み] Maven依存性 spring-webとspring-webmvcの比較
-
[解決済み] 同じurlパターンに対して異なる引数で2つのメソッドを作成する
-
[解決済み] Spring BeanPostProcessorは具体的にどのように動作するのですか?
-
[解決済み] SpringでLocalDateTime RequestParamを使用するには?StringからLocalDateTimeへの変換に失敗しました」と表示される。
-
[解決済み] Spring: 静的フィールドに値を注入するには?
-
[解決済み] Spring RestTemplateでSSL証明書検証を無効にする
-
[解決済み] Spring CORS 'Access-Control-Allow-Origin' ヘッダが存在しない。