ホームページ > Java > &#&チュートリアル > Javaカスタムアスペクト強化の方法は何ですか?

Javaカスタムアスペクト強化の方法は何ですか?

王林
リリース: 2023-05-03 18:13:07
転載
1435 人が閲覧しました
    #Java カスタム アスペクトの強化

    1. アノテーションをカスタマイズする

    @Target(value = { ElementType.TYPE, ElementType.METHOD })
    @Retention(RetentionPolicy.RUNTIME)
    public @interface CacheNullify {
        boolean value = true;
    }
    ログイン後にコピー

    2. 強化されたアスペクトを実装するlogic

    @Slf4j
    @Aspect
    @Component
    public class CacheNullifyHandler {
    
        @AfterReturning("@annotation(com.xxx.CacheNullify)")
        public void afterReturning() {
            log.info("走你");
            CacheServiceUtil.delUserInfoCache();
        }
    }
    ログイン後にコピー

    • @annotation: 以下は強化したいアノテーション (アノテーション付きメソッド) です。アノテーション名を直接記述することもできますが、名前の重複を避けるため、できるだけフルパスを記述してください

    • ##@AfterReturning

      : メソッドが実行されて正常に返された後にトリガーされます

    • @After

      : メソッドの完了後 (実行完了または例外スローを含む)

    3. ## を使用します。

    #強化する必要があるメソッドに @CacheNullify アノテーションを追加します##アスペクトとカスタム アノテーションの使用

    ##まず、アスペクトとカスタム アノテーションの基本概念と使用法を理解します。

    AOP の概要

    AOP とは、Aspect Oriented Programming の略で、アスペクト指向プログラミングを意味します。プリコンパイルと実行時の動的エージェントにより、プログラムの機能の一元的な維持を実現する技術です。 。

    AOP は、ソフトウェア開発のホットスポットである OOP の継続であり、Spring フレームワークの重要なコンテンツであり、関数型プログラミングの派生パラダイムです。

    AOP を使用すると、ビジネス ロジックのさまざまな部分を分離できるため、ビジネス ロジックのさまざまな部分間の結合が軽減され、プログラムの再利用性が向上し、開発の効率が向上します。

    AOP 定義

    Aspect (アスペクト)

    • アスペクト宣言は、次のクラスに似ています。 Java ステートメントの場合、アスペクトにはいくつかのポイントカットと対応するアドバイスが含まれます。

    ジョイント ポイント

    • は、インターセプトされたポイントを指します。春では、これらのポイントはメソッドを参照します。

    Pointcut (ポイントカット)

    • は、論理的な関係を通じて組み合わせることができる関節点のグループを表します。または、ワイルドカード、正規表現などを使用して集中して、対応するアドバイスが発生する場所を定義します。

    アドバイス (拡張/通知)

    • アドバイスは、Pointcut で定義されたプログラム ポイントが何を行うべきかを定義します。 before、after、around を使用して、各ジョイントポイントの前、後、またはその代わりに実行されるコードを区別します。

    #はじめに

    • ソースコードを変更せずに動的に追加できる特別な通知のメソッドをいくつか紹介します。

    Target (ターゲット オブジェクト)

    • Advice に組み込まれたターゲット オブジェクト。

    • #ウィービング

    • アスペクトを他のオブジェクトに接続し、アドバイスされたオブジェクトを作成するプロセス

      アノテーションの概要

      アノテーションは Java ソース コードに追加できるメタデータです。メソッド、クラス、パラメータ、パッケージはすべて、アノテーションを使用して変更できます。
    アノテーションは、メソッド、クラス、パラメータ、パッケージに使用できる特別なマークとみなすことができ、プログラムはコンパイル時または実行時にこれらのマークを検出し、特別な処理を実行できます。

    #要素と構成

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    @Inherited
    @Documented
    public @interface MyAnnotation {
        String value() default"";
    }
    ログイン後にコピー

    上記のアノテーション構成の分析

    ##public: modifier

    アクセス修飾子は public である必要があります。記述されていない場合は、デフォルトで public になります。
    • #@interface: Keyword

    キーワードは @interface;
    • MyAnnotaion: 注釈名

    注釈名はカスタムです注釈名。たとえば、上記の MyAnnotaion は注釈名です。
    • #値: 注釈タイプ要素

    注釈タイプ要素がアノテーション Content 内にある場合は、上記のアノテーションの値など、必要に応じてパラメータをマークします。
    • メタアノテーション

      ただし、注意深く分析すると、@@Target、@ で始まる 4 つのアノテーションも含まれます。 Retention、@Inherited、@Documented ) これらは 4 つの基礎となるメタアノテーションであり、他のアノテーションに注釈を付けるアノテーションです。

    • @Target: アノテーションの使用範囲を記述するために使用されます。 used

    ターゲット タイプ 説明

    ##ElementType.TYPE

    クラス、インターフェイス (アノテーション タイプを含む)、および列挙型に適用されます

    ElementType.FIELD
      プロパティに適用します (列挙型の定数を含む)
    • #ElementType.METHOD

      メソッドに適用します
    • ElementType.PARAMETER

      メソッドの仮パラメータに適用されます
    • ElementType.CONSTRUCTOR

      コンストラクターに適用されます
    • ElementType.LOCAL_VARIABLE

      ローカル変数に適用されます
    • #ElementType.ANNOTATION_TYPE

      適用されます注釈タイプへの
    • ElementType.PACKAGE

      パッケージへの適用

    注: たとえば、@Target(ElementType.METHOD) では、フラグのアノテーションがメソッドで使用されますが、このアノテーション フラグをクラスで使用すると、エラーが報告されます

    @Retention: アノテーションのライフ サイクルを示します。

    #ライフ サイクル タイプ 説明

    • RetentionPolicy.SOURCE コンパイル中に破棄され、クラス ファイルには含まれません

    • RetentionPolicy.CLASS は、JVM がロードされてクラス ファイルに組み込まれるときに破棄されます。デフォルト値

    • #RetentionPolicy.RUNTIME JVM によってロードされ、クラス ファイルに含まれ、実行時に取得できます

    • #@Inherited: マーク アノテーションです。 @Inherited はエラボレートします。 アノテーション付きの型は継承されます。 @Inherited で変更されたアノテーション型がクラスに使用されている場合、このアノテーションはクラスのサブクラスに使用されます。

    @Documented: このアノテーションでマークされた要素が Javadoc または同様のツールで文書化できることを示します

    以上がJavaカスタムアスペクト強化の方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    関連ラベル:
    ソース:yisu.com
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート