Java Annotationの原則
Java:Annotation、//www.vevb.com/article/101747.htmを使用します
注釈とは何ですか
注釈は、Common @Overrideや@Deprecatedなど、メタデータとも呼ばれます。注釈は、JDK1.5バージョンで導入された機能です。それらはコードの説明に使用され、パッケージ、クラス、インターフェイス、フィールド、メソッドパラメーター、ローカル変数などに注釈を付けることができます。その主な機能は次のとおりです。
一般的な注釈は、3つのカテゴリに分類できます。
1つのカテゴリは、@Override、 @deprecated、 @suppresswarningsなど、Javaに付属する標準的な注釈です。これらは、特定の方法が書き換えられ、特定のクラスまたは方法が時代遅れであることを示すために使用され、無視する警告があります。これらの注釈がマークされた後、コンパイラがそれをチェックします。
1つのタイプはメタアノテーションです。 Meta Annotationは、@retention、@target、@inherited、@documentedなど、注釈を定義するために使用される注釈です。 @retentionは、注釈が保持される段階を示すために使用され、@targetは使用される注釈の範囲を示すために使用され、 @inheritedは注釈を継承できることを示すために使用され、@documentedはJavadocドキュメントを生成するかどうかを示すために使用されます。
1つのタイプはカスタムアノテーションです。自分のニーズに応じて注釈を定義し、メタアノテーションを使用してカスタムアノテーションを注釈させることができます。
注釈の原則:
Javaシステムの下で注釈をサポートする方法を見てみましょう。カスタムアノテーションの上記の例に戻りましょう。次のように、注釈テストの場合。アノテーションテストクラスを注釈すると、アノテーション宣言の値は、ランタイム時にannotationtest.class.getAnnotation(test.class)を介して取得できます。上記の文から、クラス構造からテストアノテーションを取得していることがわかるため、アノテーションがいつかクラス構造に追加されたに違いありません。
@test( "test")public class annotationtest {public void test(){}}JavaソースコードからクラスBytecodeまで、コンパイラによって行われます。コンパイラはJavaソースコードを解析し、クラスファイルを生成します。注釈は、コンパイル時にコンパイラによっても処理されます。コンパイラは注釈記号を処理し、クラス構造に取り付けます。 JVM仕様によると、クラスファイル構造は厳密に順序付けられた形式です。クラス構造に情報を添付する唯一の方法は、クラス構造の属性属性に保存することです。クラス、フィールド、および方法には、クラス構造に独自の特定のテーブル構造があり、それぞれに独自の属性があることを知っています。注釈の場合、機能の範囲も異なる場合があります。クラス、またはフィールドまたはメソッドで使用できます。この時点で、コンパイラは、それに応じて、クラス、フィールド、メソッドの属性に注釈情報を保存します。
AnnotationTestクラスがコンパイルされた後、RuntimevisibleanNotationsプロパティが対応するAnnotationTest.classファイルに含まれます。この注釈はクラスに適用されるため、このプロパティはクラスの属性セットに追加されます。つまり、キー値ペア値=テストアノテーションのテストが記録されます。 JVMがAnnotationTest.Classファイルのバイトコードをロードすると、RuntimevisibleanNotationsプロパティ値がAnnotationTestのクラスオブジェクトに保存されるため、テストアノテーションオブジェクトはAnnotation.class.getannotation(test.class)を介して取得できます。
ここに質問があるかもしれませんが、テストアノテーションオブジェクトは何ですか?実際、コンパイルされた後の注釈の本質は、注釈インターフェイスを継承するインターフェイスであるため、 @Testは実際に「パブリックインターフェイステストが注釈を拡張する」ことです。 annotationtest.class.getAnnotation(test.class)を介して呼び出すと、JDKは動的プロキシを介してテストインターフェイスを実装するオブジェクトを生成し、runtimevisibleannotationsプロパティ値をこのオブジェクトに設定します。このオブジェクトは、テストアノテーションオブジェクトです。注釈値は、そのvalue()メソッドを使用して取得できます。
Java Annotationの実装メカニズムのプロセス全体を上に示します。その実装には、コンパイラとJVMの協力が必要です。
読んでくれてありがとう、私はそれがあなたを助けることができることを願っています。このサイトへのご支援ありがとうございます!