Xiaobaixueに関するメモ

ビデオを見て、メモを書いてください

コメント

jdk1.5以降の機能は主にフレームワークで使用され、面倒な設定ファイルを置き換える

  1. 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(){
        }
    
    }
    
  2. カスタム注釈

    • フォーマット

      メタ注釈

      公開@interfaceアノテーション名{

      属性リスト

      }

    • 本質:アノテーションは本質的にインターフェースであり、デフォルトでアノテーションインターフェースになります。

      • あなたは逆コンパイルを通じてソースコードを見ることができます

ここに画像の説明を挿入
逆コンパイルを実行します。

  • プロパティ:インターフェイスの抽象メソッド

    • 要件:

      1. 属性の戻り値の型には次の値があります

        • 基本的なデータ型

        • ストリング

        • 列挙

        • コメント

        • 上記のタイプの配列

          public @interface MyAnnotation {
              int method1();
              String method2();
              EnumDemo method3();
              MyAnnotation2 method4();
              int[] method5();
          }
          
          
      2. 属性が定義されており、アノテーションを使用する場合は属性に値を割り当てる必要があります

        1. 属性を定義するときにdefaultキーワードを使用して属性のデフォルトの初期化値を設定すると、値を割り当てずに注釈を使用できます
        2. 属性を1つだけ割り当てる必要があり、属性の名前がvalueの場合、valueを省略して、値を直接定義できます。
        3. 配列を割り当てる場合、値は{}でラップされます。配列に値が1つしかない場合は、{}を省略できます
  • メタ注釈:注釈の記述に使用される注釈

    • @Target:注釈が機能する場所を説明します

      • ElementType値:
        • TYPE:クラスで行動できます
        • 方法:メソッドに適用できます
        • FIELD:メンバー変数を操作できます
    • @Retention:アノテーションが保持される段階を説明します

      • @Retention(RetentionPolicy.RUNTIME):現在記述されているアノテーションはクラスバイトコードファイルに保持され、JVMによって読み取られます
    • @Documented:アノテーションがAPIドキュメントに抽出されるかどうかを説明します

    • @Inherited:アノテーションがサブクラスによって継承されるかどうかを説明します

  • プログラムで注釈を使用する:注釈によって定義された属性値を取得します

    1. アノテーション(クラス、メソッド、フィールド)で定義されたオブジェクトを取得する
    2. 指定された注釈を取得します
      • getAnnotation(クラス)
  1. アノテーションの抽象メソッドを呼び出して、構成された属性値を取得します

    @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 {};
}
元の記事を8件公開しました 受賞しました3 ビュー186

おすすめ

転載: blog.csdn.net/qq_42641075/article/details/105330138