ビデオを見て、メモを書いてください
コメント
jdk1.5以降の機能は主にフレームワークで使用され、面倒な設定ファイルを置き換える
-
JDKのいくつかの事前定義された注釈
- @Override:このアノテーションでアノテーションが付けられたメソッドが親クラス(インターフェース)を継承するかどうかを検出します
- @非推奨:注釈の内容は、それが廃止されていることを示しています
- @SuppressWarnings:警告を抑制
- 通常、すべての警告を抑制するためにパラメーターall @SuppressWarnings( "all)を渡します
@SuppressWarnings("all") //压制所有警告 public class AnnotationDemo { @Override public String toString() { return super.toString(); } @Deprecated //设置test方法已过时 public void test() {} public void test2(){ } }
-
カスタム注釈
-
フォーマット
メタ注釈
公開@interfaceアノテーション名{
属性リスト
}
-
本質:アノテーションは本質的にインターフェースであり、デフォルトでアノテーションインターフェースになります。
- あなたは逆コンパイルを通じてソースコードを見ることができます
-
逆コンパイルを実行します。
-
プロパティ:インターフェイスの抽象メソッド
-
要件:
-
属性の戻り値の型には次の値があります
-
基本的なデータ型
-
ストリング
-
列挙
-
コメント
-
上記のタイプの配列
public @interface MyAnnotation { int method1(); String method2(); EnumDemo method3(); MyAnnotation2 method4(); int[] method5(); }
-
-
属性が定義されており、アノテーションを使用する場合は属性に値を割り当てる必要があります
- 属性を定義するときにdefaultキーワードを使用して属性のデフォルトの初期化値を設定すると、値を割り当てずに注釈を使用できます
- 属性を1つだけ割り当てる必要があり、属性の名前がvalueの場合、valueを省略して、値を直接定義できます。
- 配列を割り当てる場合、値は{}でラップされます。配列に値が1つしかない場合は、{}を省略できます
-
-
-
メタ注釈:注釈の記述に使用される注釈
-
@Target:注釈が機能する場所を説明します
- ElementType値:
- TYPE:クラスで行動できます
- 方法:メソッドに適用できます
- FIELD:メンバー変数を操作できます
- ElementType値:
-
@Retention:アノテーションが保持される段階を説明します
- @Retention(RetentionPolicy.RUNTIME):現在記述されているアノテーションはクラスバイトコードファイルに保持され、JVMによって読み取られます
-
@Documented:アノテーションがAPIドキュメントに抽出されるかどうかを説明します
-
@Inherited:アノテーションがサブクラスによって継承されるかどうかを説明します
-
-
プログラムで注釈を使用する:注釈によって定義された属性値を取得します
- アノテーション(クラス、メソッド、フィールド)で定義されたオブジェクトを取得する
- 指定された注釈を取得します
- getAnnotation(クラス)
-
アノテーションの抽象メソッドを呼び出して、構成された属性値を取得します
@MyAnnotation2(className = "com.pretext.reflect.Person", methodName = "eat") public class AnnoTest { public static void main(String[] args) throws Exception{ Class<AnnoTest> clazz = AnnoTest.class; MyAnnotation2 annotation = clazz.getAnnotation(MyAnnotation2.class); /* 实际上相当于在内存中生成了一个类实现了该注解的类 public MyAnnotation2Impl implements MyAnnotation2 { public String className(){ return "com.pretext.annotation.MyAnnotation2; } */ System.out.println(annotation.className()); System.out.println(annotation.methodName()); Class<?> aClass = Class.forName(annotation.className()); Person person = (Person) aClass.newInstance(); Method method = aClass.getMethod(annotation.methodName()); method.invoke(person); } }
Springフレームワークで注釈を表示して、理解を深める
RequestMappingアノテーション
@Target({ElementType.METHOD, ElementType.TYPE}) //元注解可已在方法,类中添加
@Retention(RetentionPolicy.RUNTIME) //表示保留到class上,并在JVM中加载
@Documented //提取文档时保留注解
@Mapping //没发现作用,里面只有元注解的出现
public @interface RequestMapping { //属性都设置的默认值,因此单独写path时没有写属性名
String name() default "";
@AliasFor("path") //为注解取别名,与下面的value相对应,防止同时出现程序发生异常
String[] value() default {};
@AliasFor("value")
String[] path() default {};
RequestMethod[] method() default {};
String[] params() default {};
String[] headers() default {};
String[] consumes() default {};
String[] produces() default {};
}