Javaアノテーションの深い理解

コメントとは何ですか?

定義された注釈

次のように公式サイトでは説明しました:

次いで、上記の単語と次のように変換する:
(1)開発中のメタデータの役割は、データの制約と標準の定義を行うことであり、それは仕様標準コード(テンプレートコード)を理解することができ、
テンプレート(要素(2)

要約すると、注釈は、メタデータであり、それは、私たちは私たちは、より効率的なコードを書くために使用されるコードで正式な情報を追加することが道を提供することを説明し、コメントとして理解することができます。

分類注釈

一般的に使用される注釈は、次の3つのカテゴリに分けることができます。

1、Javaは標準のアノテーションが来る
オーバーライド@含まれ、非推奨@、SuppressWarnings @など、コンパイラを使用して、これらの注釈がチェックされます。

図2に示すように、メタアノテーション
メタデータアノテーションアノテーションは、保持@を含む、アノテーションを定義するために使用されるターゲット@、@継承反復@、@文書化が挙げられます。
元はという特記事項の変更を除いて、標準のJavaアノテーションが付属しても指摘しています。

3、カスタム注釈
ユーザーが自分たちのニーズのコメントを定義することができます。

注釈を使用します

Javaアノテーションの使用が付属しています
Javaの組み込みの注釈、例えば、以下の方法を使用して、注釈をオーバーライドするjava.langでの定義されたアノテーションのセットです。

@Override上記脚注// @Overrideの過程で
保護ボイドのonCreate(){

}

次のように一般的にJavaアノテーションを使用しました。


1、非推奨@ -マークされたコンテンツは、もはや推奨され;
2、オーバーライド@ -タグ付け方法が唯一カバーし、この方法では、親クラスを示し;
3、@文書化の-コンテンツのjavadocには表示されないことがありマーク。
4 ;だけ「注釈タイプ」をマークするために使用することができ、それは、アノテーションの継承をマークした- 、@継承
5、リテンション@ -だけ「注釈タイプ」をマークするために使用することができ、そしてプロパティRetentionPolicyのアノテーションを指定するために使用されます;
6、ターゲット@ -だけ「注釈タイプ」をマークするために使用することができ、そしてアノテーションのElementTypeの属性を指定するために使用され、
7、@ SuppressWarnings -注釈によって生成された警告の内容は、コンパイラがサイレント警告のままになります。。
8 、@インタフェース-アノテーションを定義するために使用されます。

その中でも、カスタム注釈のために使用4,5,6,8、どのようなリーダーのフォーカスを覚えています。

カスタム注釈

Javaでは、私たちは次のように、@interfaceアノテーションをカスタマイズするために注釈を使用します。

公共@interface MyTestAnnotation {

}

この時点で、我々はコメントMyTestAnnotationを定義している、そして私たちは、クラスやメソッドのちょうど新しい注釈を持って行動することができます。

@MyTestAnnotation
パブリッククラスTest {
  @MyTestAnnotation
  パブリック静的ボイドたTestString(){
  }
}

この時点で、我々は、コメントをカスタマイズしているが、今この注釈は無意味。

注釈を動作させるためにどのように?これはメタアノテーションを使用する必要があります。

一般的に使用されるメタアノテーションは@Retention、@Target、@Document、@Inheritedと@Repeatable 5を持っています。

@Retentionの
注釈相の存在を示す保持予約英語の意味を、保持手段は、ソース(コンパイル)、バイトコード(クラスローダー)またはランタイム(JVMの実行)に保持されています。

予約済みコメント期間を表すために列挙RetentionPolicy利用の@Retentionノート:
リテンション(RetentionPolicy.SOURCE)@•、注釈付きソースコードは、クラスのバイトコードファイル内に存在しているが含まれていません
リテンション(RetentionPolicy.CLASS)、デフォルト@•を保持ポリシーは、注釈は、クラスのバイトコードファイル内に存在しますが、ランタイムは利用できません
。•@リテンション(RetentionPolicy.RUNTIME)は、注釈を反射することによって得ることができ、実行時にクラスのバイトコードファイルに存在します

私たちは、カスタム注釈されている場合は、以前の分析を通じて、我々のカスタム注釈のみ続ける場合は、ソースコードまたはバイトコードファイルが役割を果たしていますが、動作中の私たちの目的を達成するためにノートを取得することができますので、カスタム注釈次のように確かに、@Retention(RetentionPolicy.RUNTIME)を使用しました:

@Retention(RetentionPolicy.RUNTIME)
パブリック@interface MyTestAnnotation {

}

@Target
ターゲット英語の意味は、それが@targetメタ注釈ノートには、私たちの役割の範囲がより具体的で、クラス、メソッド、メソッドのパラメータ、変数などすることができ示して使用し、また理解することは非常に簡単です、またのElementTypeを列挙することによってクラスのゴールです型の式:
•ターゲット(ElementType.TYPE)インタフェース、クラス、列挙型の役割、注釈@
•@ターゲット(ElementType.FIELD)役割属性フィールド、列挙定数
•@ターゲット(ElementType.METHOD)アクションの方法
。•@ターゲット(ElementType.PARAMETER)アクションパラメータの方法
コンストラクタ働くターゲット(ElementType.CONSTRUCTOR)@•
ローカル変数働く。•@ターゲット(ElementType.LOCAL_VARIABLE)
このプロパティの使用上の注釈に(@Retentionアノテーションを演技ターゲット(ElementType.ANNOTATION_TYPE)@•を)
ターゲット@(ElementType.PACKAGE)は袋に適用します
ジェネリック型に作用する。•@ターゲット(ElementType.TYPE_PARAMETER)、すなわち一般的な方法、ジェネリッククラス、ジェネリックインターフェイス(jdk1.8添加)
ターゲット(のElementType @•。 TYPE_USE)タイプを使用して、任意のタイプの他のクラスの標識に使用することができる(jdk1.8)を添加しました

次のようにElementType.TYPE一般的なタイプは、一般的に、使用されています。

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
パブリック@interfaceのMyTestAnnotation {

}

@Documented
ドキュメントは英語の文書を意味します。その役割はのJavadoc行くに含めることができます注釈要素にあります。

@Inherited
彼は他のコメントを変更されていない場合は継承され、英語の意味が継承されていますが、連続して継承は、我々は通常、非常に多くの同じ理解し、それはサブクラス化し、@Inherited注釈付きノート親クラスの変更、サブクラスでありますまた、親クラスのノートを継承します。

@Repeatable
反復英語の意味が反復可能です。名前が示すようにメタアノテーション注釈を付け、この変更命令がオブジェクトに同時に複数回行動するが、各時間役割注釈と異なる意味を表すことができます。

注釈付きソースコード解析は
、私たちには、例えば、ソースコードを解析するために、私はそのソースコードを入力する@OverrideをCtrlキーを押しながらクリックすると、以下のように、一般的なカテゴリを見たい、ノートを@Override:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
パブリック@interfaceオーバーライド{
}

私たちは、一般的なコメント@Overrideアノテーションは@interfaceコメントによって定義されて見て、私たちは、使用@interfaceが定義されたとき、という注釈を知って、それはコメントが注釈であることを、インタフェースを実装しjava.lang.annotation.Annotation意味します

注意:注釈、@インタフェースを定義する必要がある場合には、それは異なっており、我々は通常、インターフェースのメソッドの実装を実装しました。注釈インタフェースの実装の詳細は、コンパイラによって完了します。コメントによって定義された@interface、コメントが他のコメントやインターフェイスを継承することはできません。

次のようにのは、ソースコードの注釈クラスを分析してみましょう:

パブリックインターフェース注釈{
    ブール等しい(オブジェクトVAR1)。

    int型のhashCode();

    文字列のtoString()。

    クラス<?)(注釈> annotationTypeを拡張します。
}

上記のソースを通じて、我々は、注釈自体がサブインタフェースの注釈インタフェースである知っている、という事実は、注釈のプロパティとメソッドを持つことができますが、界面特性が最終的な静的であることを、ノートのために、それは意味がない、と私たちは、インターフェイスを定義しますこの方法は、注釈のプロパティに相当し、それが唯一の理由は、注釈メンバ変数を言うために財産の前面に対応し、実際には、彼は我々が与えることができるブラケットメンバ変数が存在することになる理由であるインタフェースは、括弧のコメントのインターフェイスと異なっている方法です。メンバ変数。

Javaアノテーションアーキテクチャ

次のようにソースコードの解析によると、私たちは、Javaアノテーション(注釈)アーキテクチャになってきました。

Javaアノテーションの深い理解

Javaアノテーションの概要(最も完全な歴史を、この1つは十分にあるがあります)

0コメントは、インタフェースクラスは、インターフェイスクラスは、Annotationから継承しています

注釈1、1、1 RetentionPolicyアソシエーションが
として理解することができる:注釈オブジェクトにつき1 RetentionPolicy独特の特性を有することになります。

注釈2、1、1〜N番目の相関がELEMENTTYPE
次のように理解される:各1つのアノテーションオブジェクトの場合、いくつかのElementTypeを有することができる属性。

そうでは非推奨、文書化、継承、オーバーライド、および:3は、注釈を含むカテゴリの多くは、ある実現します。
各クラスの注釈と関連する実装RetentionPolicyと1と1〜N番目のElementTypeアソシエーション。

注釈の役割

使用前の注釈は、我々が最初にXMLとアノテーションの違いを紹介し、言いました:

注:分散型のメタデータ、しっかりとソースコードを結合させました。

XML:それはソースコードが無い結合して、集中型のメタデータであります

Javaの背景の開発に使用される設定項目のこの部分は、我々は、マルチサーバ構成項目数年前は、XMLファイルに保存されていることを知って、そして春は機能するのではなく、設定ファイルを有効にする、2.5のアノテーションベースの設定の後に始まりました。

注釈は、上記の単純な例で、合計の出発を大量に使用して、注釈には次の4つの主要な機能があります。

図1に示すように、メタデータJavadocの世代識別コードを介して、文書を生成します。

図2に示すように、コンパイラは、コンパイル時のチェックで、コンパイラが確認するようにコードによって識別されたメタデータをチェックします。

3、動的コンパイルプロセスは、動的メタデータは、動的に生成されたコードのように、コンパイル時の識別コードによって処理されます。

図4に示すように、動的プロセス、処理動的メタデータの識別コードは、射出反射例を用いて、例えば、ランタイムによって実行します

おすすめ

転載: www.linuxidc.com/Linux/2019-10/160960.htm