Spring のメタアノテーション

1. メタアノテーションの概要 

1.1. ソースコードの紹介 

 1.2. メタアノテーションの概要

        上の図からわかるように、Spring には次の 4 つのメタ アノテーション [他のアノテーションを担当する] があります。

        @Target : クラス、メソッド、フィールドなど、注釈を使用してマークできるプログラム要素を識別します。

        @Retention : アノテーションのライフ サイクル、つまり、アノテーションがいつ保持されるかを識別します。オプションのライフ サイクルには、ソース コード (SOURCE)、コンパイル時間 (CLASS)、およびランタイム (RUNTIME) が含まれます。

                RetentionPolicy.SOURCE: この注釈はソース コード内にのみ存在し、コンパイラはコンパイル時にこれらの注釈を無視します。これは、これらの注釈がコンパイルされた .class ファイルに含まれないことを意味します。このアノテーションは通常、コンパイル時の検査とデバッグに使用されます。

RetentionPolicy.CLASS: この注釈はコンパイル時に保持され、.class ファイルに保存されますが、実行時には無視されます。このアノテーションは主にコンパイル時のバイトコード処理に使用されます。

                RetentionPolicy.RUNTIME: 注釈は実行時に保持され、注釈情報はリフレクションを通じて取得できます。この種のアノテーションは通常、カスタム IOC フレームワークや AOP フレームワークなどの実装など、実行時にいくつかのロジックを処理するために使用されます。

                一般に、実行時にリフレクションを通じてアノテーション情報を取得する必要がある場合は、アノテーションの Retention プロパティを RetentionPolicy.RUNTIME に設定する必要があります。

        @Documented : 注釈が JavaDoc に含まれることを識別します。

        @Inherited : アノテーションを継承できるかどうかを指定するために使用されます。デフォルトでは、アノテーションはサブクラスに継承されません。

 2. メタアノテーションの必要性

        Spring Framework では、メタアノテーションの使用はオプションであり、必要に応じて一部を省略できます省略できるメタアノテーションをいくつか示します。

        1. @Target: メタアノテーションが指定されていない場合、アノテーションはすべてのターゲット要素タイプに適用できます。

        2. @Retention: このメタアノテーションが指定されていない場合、デフォルトのライフサイクルはランタイム (RUNTIME) です。

        3. @Documented: メタアノテーションが指定されていない場合、アノテーションは Java ドキュメントに含まれません。

        4. @Inherited: このメタアノテーションが指定されていない場合、アノテーションはサブクラスに継承できません。  

3. メタアノテーションの省略に関する制限事項 

         上記の紹介からはそれぞれを省略できるように見えますが、実際には4 つのメタアノテーションをすべて同時に省略することは不可能です

        このうち、@Retention と @Target はアノテーションのライフサイクルと適用対象を定義するため必須です。これら 2 つのメタアノテーションが省略された場合、コンパイラーはアノテーションを正しく解析して処理できません。

         @Documented と @Inherited はオプションであり、必要に応じて省略できます。ただし、@Documented を省略すると、アノテーションが Java ドキュメントに表示されなくなります。また、@Inherited を省略すると、アノテーションがサブクラスに継承されなくなることに注意してください。

おすすめ

転載: blog.csdn.net/weixin_52255395/article/details/131943369