English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SpringBoot AOP

このアプリケーションは通常、多層開発されます。典型的なJavaアプリケーションには以下のレベルがあります:

Webレイヤー: RESTやWebアプリケーションを通じて公開されます。サービスに移されました。 ビジネスレイヤー: アプリケーションのビジネスロジックに移されました。 データレイヤー: アプリケーションの持久性ロジックに移されました。

各レベルの責任は異なりますが、すべてのレベルに適用される一般的なアスペクトは、 ログ記録、セキュリティ、検証、キャッシュなどこれらの一般的なアスペクトは、 横断的な注目点。

これらの注目点をそれぞれのレベルで実現する場合、コードは保守が難しくなります。この問題を克服するために、 アスペクト指向プログラミング(AOP)は、横断的な問題を解決する解決策を提供します。

横断的な注目点をアスペクトとして扱います。 アスペクトを適用する必要がある場所を示す切入点を定義します。

それは、横断的な注目点が集約されたコードコンポーネントで定義されることを確保します。

AOP

AOP (アスペクト-面向オブジェクトプログラミング)許可することで のみ提供するランタイムの織り込みモジュール化されたプログラミングパターンを分離して、これらの横断的な注目点と主要なビジネスロジックを区別します。コード自体を変更せずに、既存のコードに他の行動を追加することができます。

SpringのAOPフレームワークは、これらの横断的な注目点を実現するのに役立ちます。

使用AOP,我们在一个地方。我们可以自由定义应用此功能的方式和位置,而无需修改应用新功能的类。现在,可以将横切关注点模块化为特殊类,称为 まず、各関心のロジックは現在、コードベース全体に分散されるのではなく、一箇所に集中されています。に移されました。

AOPを使用して、一箇所で。この機能を適用する方法や場所を自由に定義できます。新しい機能を追加するクラスを変更する必要はありません。今や、横断的関心点は特別なクラスとしてモジュール化できます。 使用します。側面には、

二つの の利点:まず、各関心のロジックは現在、コードベース全体に分散されるのではなく、一箇所に集中されています。に移されました。

次に、ビジネスモジュールは主な関心のコードのみを含みます。次要関心は 側面があります。

各側面には、実行する必要がある役割、

Advice 。一つまたは複数の接続点で、側面の機能を実行するプログラムに実装できます。 AOPの利点 純Javaで実装されています。 特別なコンパイルプロセスが必要ありません。 JDK動的プロキシ実行時、ロード時 は、メソッドの実行接続点のみをサポートします。

のみ提供するランタイムの織り込み

AOP代理の二種類があります:

CGLIBプロキシです。

Aspect: 横断的関心点AOPの横断的関心点は、アプリケーションの複数の場所で実現する必要がある関心点です。これは全体のアプリケーションに影響を与えます。実行時、ロード時側面は、AOPの用語を含むモジュールです。advicepointcuts-を提供し、cross cutting 多くの側面があります。@Aspectを使用して、 Pointcut: @Aspect切入点は、Adviceを実行する一つまたは複数の接続点を選択する表現です。以下のように注釈付きの通常のクラスを使用して実現できます。またはexpressionspatterns AspectJ 定義します。接続点と一致する異なるタイプの表現を使用します。Spring Frameworkでは、 切入点表現言語です。 Join point: 接続点は、アプリケーション内で適用されるAOPの側面メソッドの実行、例外処理、オブジェクト変数の値の変更のポイントです。AOPでは、接続点はなどです。 Advice: Adviceは、メソッドの実行前に呼び出されるものです。beforeまたはafter取る措置。このアクションはプログラムの実行中に呼び出されるコードの一部です。Spring AOPフレームワークには五種類タイプのAdvice: Advicebefore、after、after-returning、後で-throwingとaround advice。は特定のjoin pointのAdvice。 この節では、これらのAdviceについてさらに詳しく説明します。 Target object: Adviceを適用したオブジェクトはtarget object。ターゲットオブジェクトは常にproxiedこれは、実行時にターゲットメソッドを覆うサブクラスが作成され、Adviceが含まれるように設定されることを意味します。 Weaving: Weaving:これは各方面を他のアプリケーションタイプと関連付けるためのものです。linking aspectsのプロセスです。以下で実行時、ロード時およびコンパイル時

Weaving: これはアドバイスをターゲットオブジェクトに適用した後に作成されるオブジェクトで、Proxyと呼ばれます。 proxy 。Spring AOPは JDK動的プロキシ、ターゲットクラスとアドバイスを呼び出してプロキシクラスを作成します。これらはAOPプロキシクラスと呼ばれます。

AOPとOOP

AOPとOOPの違いは以下の通りです:

AOP OOP
Aspect: 切入点、アドバイス、属性を含むコードユニットの封装です。Class: メソッドや属性を含むコードユニットの封装です。
Pointcut: それはアドバイスを実行するエントリポイントのセットを定義します。Method signature: 。それはメソッドの主体を実行するエントリポイントを定義します。
Advice: これは多領域の関心の実装です。Method bodies: それはビジネスロジック問題の実装です。
Waver: アドバイスを使ってコード(ソースまたはオブジェクト)を構築します。 Compiler: 源コードを目的コードに変換します。

Spring AOPとAspectJ

AOPとOOPの違いは以下の通りです:

Spring AOP AspectJ
独立したコンパイルプロセスが必要です。それはAspectJコンパイラが必要です。
それはメソッド実行切入点のみをサポートしています。それはすべての切入点をサポートしています。
それはSpring Containerで管理されるbeanで実現できます。それはすべてのドメインオブジェクトで実現できます。
それはメソッドレベルの結合をサポートしています。それはフィールド、メソッド、コンストラクタ、静的初期化子、最終クラスなどに影響を与えることができます。

AOPアドバイスのタイプ

AOPアドバイスには以下の5つのタイプがあります:

Before Advice After Advice Around Advice After Throwing After Returning

Before Advice: 接続ポイントの前で実行されるアドバイスは通知の前に呼び出されます。以下を使用して @Before アノテーションはアドバイスをBefore通知としてマークします。

After Advice: 接続ポイントの後で実行されるアドバイスはafter notificationと呼ばれます。以下を使用して @After アノテーションはアドバイスをAfter通知としてマークします。

Around Advice: 接続ポイントの前後で実行されるアドバイスは

After Throwing: 接続ポイントで例外が発生した場合に実行されるアドバイスです。

After Returning: メソッドが正常に実行された場合に実行されるAdvice。

AOPを実装する前に、pom.xmlファイルに追加する必要があります。 Spring AOP 依存関係。

Spring Boot Starter AOP

Spring Boot Starter AOPは、Spring AOPとAspectJの依存関係を提供します。AOPは基本的なAOP機能を提供し、AspectJは完全なAOPフレームワークを提供します。

依存関係>
<グループID>org.springframework.boot</グループID>
<アーティファクトID>spring-ブート-スターター-aop</アーティファクトID>
<バージョン>2.2.2.RELEASE</バージョン>
</依存関係>

次のセクションでは、アプリケーションで異なるAdviceを実装します。