Javaアノテーションを内蔵し、我々はに精通している、そして今、実現したノートの原則を見て、次のJavaシステムを見てカスタムアノテーションは、アノテーションをサポートする方法です。
見た目カスタム注釈の例を説明する前に、そのようなカスタムアノテーションを達成するために:インジェクションを@Testに特定の文字列で、メソッドの@TestMethodに文字列を注入します。
①クラスの役割に関するテスト注釈文を作成し、実行するために予約され、デフォルトはデフォルトです。
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {
String value() default "default";
}
②方法ランタイムに作用するのtestMethodノート、宣言して予約を作成します。
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface TestMethod {
String value();
}
③テストクラス、デフォルトなし着信@Test値ので、二つの文字列のTomcat法を実行した後、出力、デフォルト値の出力、および出力は注入列を@TestMethod。
@Test()
public class AnnotationTest {
@TestMethod("tomcat-method")
public void test(){
}
public static void main(String[] args){
Test t = AnnotationTest.class.getAnnotation(Test.class);
System.out.println(t.value());
TestMethod tm = null;
try {
tm = AnnotationTest.class.getDeclaredMethod("test",null).getAnnotation(TestMethod.class);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(tm.value());
}
}
クラス宣言のランタイムAnnotationTest.class.getAnnotation(Test.class)注釈値によって取得することができればAnnotationTestに注釈を付ける注釈のための試験は、試験クラス構造体から取得される上記文章から分かります注釈付き、それはいくつかの点で注釈が、クラス構造、外出先に追加されなければならないので。
@Test("test")
public class AnnotationTest {
public void test(){
}
}
ソースからのクラスのJavaバイトコードは、コンパイラによって行われるために、コンパイラは、ソースコードを解析し、Javaクラスファイルを生成し、注釈は、コンパイル時に、コンパイラが処理するコンパイラによって処理され、注釈シンボルに取り付けられますクラス構造は、JVM仕様に応じて、クラスファイルの構造は、厳格かつ整然とした形式、属性にクラス構造を属性に保存されたクラス構造への追加情報の唯一の方法です。
私たちは、クラス、フィールドのために、方法は、クラスの構造に独自の具体的なテーブル構造を持ち、それぞれが独自の特性を有し、そして注釈のために、行動の範囲が異なる場合があり、また行動することができ、クラスに作用することができることを知っていますフィールドまたはメソッドで、コンパイラは、クラス、フィールド、メソッド、独自のプロパティにアノテーション情報に格納されるべきです。
当社AnnotationTestクラスがコンパイルされた後、これはクラスの役割にコメントがあるので、この属性はクラスの属性の集合に追加されているので、対応するAnnotationTest.classファイルで、RuntimeVisibleAnnotationsプロパティが含まれます。
キーと値のペアの値のテストアノテーションは=テストが一緒に記録されます。でプロパティ値RuntimeVisibleAnnotations ClassオブジェクトのAnnotationTestに保存されますAnnotationTest.class JVMバイトコードファイルをロードするので、彼はテストAnnotationTest.class.getAnnotation(Test.class)を経由して注釈オブジェクトを取得することができた場合、さらに通じテスト注釈オブジェクトは、プロパティ値をテスト内で取得します。
ここで注釈オブジェクトが何であるかをテストし、間違いであってもよいですか?
実際には、注釈の性質は、コンパイルされ事実@Test、パブリックインターフェイステストは、我々はAnnotationTest.class.getAnnotation(Test.class)によって呼び出すと、JDKが動的プロキシを生成することによって達成される、注釈を拡張して、継承されたインターフェイスの注釈インターフェースであります検査対象のインタフェース、及び目的は、このRuntimeVisibleAnnotationsプロパティの値に設定され、オブジェクトは、注釈の値を取得することができる()メソッドにその値を介して、テスト注釈オブジェクトです。
その実装で、図示及び上記JVMとコンパイラを必要とするプロセスのアノテーション実装機構。