Java 自定義注解


Java 自定義注解

 

 

 

1、簡介

 注解是一種能被添加到java源代碼中的元數據,方法、類、參數和包都可以用注解來修飾。注解可以看作是一種特殊的標記,可以用在方法、類、參數和包上,程序在編譯或者運行時可以檢測到這些標記而進行一些特殊的處理。

 

2、元注解

元注解的作用就是負責注解其他注解。Java5.0定義了4個標准的meta-annotation類型,它們被用來提供對其它 annotation類型作說明。Java5.0定義的元注解:

1.@Target,
2.@Retention,
3.@Documented,
4.@Inherited

這些類型和它們所支持的類在java.lang.annotation包中可以找到。下面我們看一下每個元注解的作用和相應分參數的使用說明。

2.1、@Target

表明該注解可以應用的java元素類型:

Target類型 描述
ElementType.TYPE 應用於類、接口(包括注解類型)、枚舉
ElementType.FIELD 應用於屬性(包括枚舉中的常量)
ElementType.METHOD 應用於方法
ElementType.PARAMETER 應用於方法的形參
ElementType.CONSTRUCTOR 應用於構造函數
ElementType.LOCAL_VARIABLE 應用於局部變量
ElementType.ANNOTATION_TYPE 應用於注解類型
ElementType.PACKAGE 應用於包
ElementType.TYPE_PARAMETER 1.8版本新增,應用於類型變量
ElementType.TYPE_USE 1.8版本新增,應用於任何使用類型的語句中(例如聲明語句、泛型和強制轉換語句中的類型)

2.2、@Retention
  表明該注解的生命周期

生命周期類型 描述
RetentionPolicy.SOURCE 編譯時被丟棄,不包含在類文件中
RetentionPolicy.CLASS JVM加載時被丟棄,包含在類文件中,默認值
RetentionPolicy.RUNTIME 由JVM 加載,包含在類文件中,在運行時可以被獲取到

2.3、@Document
  表明該注解標記的元素可以被Javadoc 或類似的工具文檔化。

 

2.4、@Inherited
  表明使用了@Inherited注解的注解,所標記的類的子類也會擁有這個注解。

 

3、自定義注解

  1. 修飾符: 訪問修飾符必須為public,不寫默認為pubic;
  2. 關鍵字: 關鍵字為@interface;
  3. 注解名稱: 注解名稱為自定義注解的名稱,使用時還會用到;
  4. 注解內容: 注解中內容,對注解的描述。

3.1、自定義@MyController注解:

/** * @Author dw * @ClassName MyController * @Description 自定義注解, 可用於類、方法上 * @Date 2022/1/10 21:33 * @Version 1.0 */ @Documented @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Inherited public @interface MyController { String value() default ""; String des() default "我是一個自定義注解"; }

 

3.2、在類上使用自定義的注解

/** * @Author dw * @ClassName TestAnnotation * @Description 自定義注解使用 * @Date 2022/1/10 21:42 * @Version 1.0 */ @MyController(value = "我是指定注解value") public class TestAnnotation { public static void main(String[] args) { try { TestAnnotation testAnnotation = new TestAnnotation(); Class<? extends TestAnnotation> aClass = testAnnotation.getClass(); //判斷person對象上是否有Info注解
            if (aClass.isAnnotationPresent(MyController.class)) { System.out.println("TestAnnotation類上配置了MyController注解!"); //獲取該對象上Info類型的注解
                MyController myController = aClass.getAnnotation(MyController.class); System.out.println("myController.value :" + myController.value() + ", myController.des:" + myController.des()); }  } catch (Exception e) { e.printStackTrace(); } } }

執行結果如下:

 

 

4、Aop中的應用:

請參考之前的文章:在Aop 中使用自定義注解

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM