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: 以下は強化したいアノテーション (アノテーション付きメソッド) です。アノテーション名を直接記述することもできますが、名前の重複を避けるため、できるだけフルパスを記述してください
: メソッドが実行されて正常に返された後にトリガーされます
: メソッドの完了後 (実行完了または例外スローを含む)
#強化する必要があるメソッドに @CacheNullify アノテーションを追加します##アスペクトとカスタム アノテーションの使用
##まず、アスペクトとカスタム アノテーションの基本概念と使用法を理解します。 AOP の概要 AOP とは、Aspect Oriented Programming の略で、アスペクト指向プログラミングを意味します。プリコンパイルと実行時の動的エージェントにより、プログラムの機能の一元的な維持を実現する技術です。 。 AOP は、ソフトウェア開発のホットスポットである OOP の継続であり、Spring フレームワークの重要なコンテンツであり、関数型プログラミングの派生パラダイムです。 AOP を使用すると、ビジネス ロジックのさまざまな部分を分離できるため、ビジネス ロジックのさまざまな部分間の結合が軽減され、プログラムの再利用性が向上し、開発の効率が向上します。 AOP 定義アスペクト宣言は、次のクラスに似ています。 Java ステートメントの場合、アスペクトにはいくつかのポイントカットと対応するアドバイスが含まれます。
ジョイント ポイント
は、インターセプトされたポイントを指します。春では、これらのポイントはメソッドを参照します。
Pointcut (ポイントカット)
は、論理的な関係を通じて組み合わせることができる関節点のグループを表します。または、ワイルドカード、正規表現などを使用して集中して、対応するアドバイスが発生する場所を定義します。
アドバイス (拡張/通知)
アドバイスは、Pointcut で定義されたプログラム ポイントが何を行うべきかを定義します。 before、after、around を使用して、各ジョイントポイントの前、後、またはその代わりに実行されるコードを区別します。
ソースコードを変更せずに動的に追加できる特別な通知のメソッドをいくつか紹介します。
Advice に組み込まれたターゲット オブジェクト。
アノテーションの概要
アノテーションは Java ソース コードに追加できるメタデータです。メソッド、クラス、パラメータ、パッケージはすべて、アノテーションを使用して変更できます。#要素と構成
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented public @interface MyAnnotation { String value() default""; }
##public: modifier
アクセス修飾子は public である必要があります。記述されていない場合は、デフォルトで public になります。#@interface: Keyword
MyAnnotaion: 注釈名
#値: 注釈タイプ要素
ただし、注意深く分析すると、@@Target、@ で始まる 4 つのアノテーションも含まれます。 Retention、@Inherited、@Documented ) これらは 4 つの基礎となるメタアノテーションであり、他のアノテーションに注釈を付けるアノテーションです。
クラス、インターフェイス (アノテーション タイプを含む)、および列挙型に適用されます
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.RUNTIMEJVM によってロードされ、クラス ファイルに含まれ、実行時に取得できます
@Documented: このアノテーションでマークされた要素が Javadoc または同様のツールで文書化できることを示します
以上がJavaカスタムアスペクト強化の方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。