Java 註解機制

來源:互聯網
上載者:User

標籤:

一、註解中的資訊已經在Class中了,我們應該如何讀取出來
1 java.lang.reflect.AnnotatedElement介面:2 3 public Annotation[] getAnnotation(Class annotationType);4 5 public Annotation[] getDeclaredAnnotations();6 7 public Boolean isAnnotationPresent(Class annotationType);
View Code

    Class 、Constructor、Field、Method、Package等類別,都實現了AnnotatedElement介面,既然Class 、Constructor、Field、Method、Package等類別,都實現了AnnotatedElement介面,顯然它們都可以去調用AnnotatedElement裡面的方法,以上各方法是定義在這個介面中的,定義Annotation時必須設定RententionPolicy為RUNTIME,也就是可以在VM中讀取Annotation資訊

 二、通過反射的方式讀取作用在類、方法上面所修飾的註解資訊。

1、public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)

這句代碼錶示:annotationClass指定的註解,如果存在於方法的上面,就返回一個true,這個方法主要是用來判斷某個方法上面是否存在註解。

2、public <T extends Annotation> T getAnnotation(Class<T> annotationClass)

會返回一個Annotation這樣一個對象,參數裡邊兒是一個具體的Annotation Class對象,如果這樣一個Annotation存在的話,才會返回這個Annotation。否則返回一個空值

3、Class<? extends Annotation> annotationType()

返回註解所對應的Class對象。

三、限定annotation使用對象

@Target

使用java.lang.annotation.Target可以定義其使用之時機,就是限定可以在什麼地方可以使用註解:如方法、類、成員屬性、變數,在定義時要指定java.lang.annotation.ElementType的枚舉值之一,以此來表示這個註解可以修飾哪些目標。

package java.lang.annotation

public Enum ElementType{

         TYPE,//適用class,interface,enum

         FIELD,//適用field

         METHOD,//適用method

         PARAMETER,//適用method之上的parater

         CONSTTRUCTOR,//適用constructor

         LOCAL_VARIABLE,//適用局部變數

         ANNOTATION_TYPE,//適用annotation型態

         PACKAGE//適用package

}

 1 package com.javase.annotation; 2 import java.lang.annotation.ElementType; 3 import java.lang.annotation.Target; 4 /** 5  * 自訂一個註解,這個註解只能修飾方法 6  * @author x_xiongjie 7  * 8  */ 9 @Target(ElementType.METHOD)10 public @interface MyTarget {11     String value();12 }13 14 package com.javase.annotation;15 16 public class MyTargetTest {17     @MyTarget(value="zhangsan")18     public void doSomething(){19         System.out.println("hello world");20     }21 }
View Code四、要求為API檔案@Documented

    在製作JavaDoc檔案的同時,如果想要將Annotation的內容也加入到API檔案中,需要使用java.lang.annotation.Documented,則在在產生java doc的時候,將註解資訊也產生到java doc中。

 1 package com.javase.annotation; 2 import java.lang.annotation.Documented; 3  4 @Documented 5 public @interface DocumentedAnnotation { 6     String hello(); 7 } 8 package com.javase.annotation; 9 10 public class DocumentedTest {11     @DocumentedAnnotation(hello="welcome")12     public void method(){13         System.out.println("helloworld");14     }15 }
View Code五、@Inherited

    在定義Annotation時加上java.lang.annotation.Inherited形態的Annotation,Inherited表示一個註解資訊是否可以被自動繼承下來,如果在註解中加上Inherited註解,就會由父類中被子類繼承下來。

六:總結

1、要知道註解的本源是什麼,如何去定義註解。

2、如何使用反射的方式去解析註解的資訊,並且去解析註解下面所修飾的類、方法。根據註解是否存在註解的值到底是什麼,來去調用對應的方法,或者處理對應的類。這個是很重要的,將RetentionPolicy設定為RUNTIME就可以得到。

 

Java 註解機制

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.