java的三大高級特性之一,是JDK的1.5的引進。註解將廣大的javaer從拿巨大的XML配置文件中解放處理,專一與業務代碼。同時大大減低了框架的上手難度。註解使用先建立一個註解類,在正常的類中使用,而後經過反射獲取其值。java
a) @Target:該註解能夠用在什麼地方,可選的ELementType參數。框架
1. CONSTRUCTOR:用於描述構造器
2. FIELD:用於描述域
3. LOCAL_VARIABLE:用於描述局部變量
4. METHOD:用於描述方法
5. PACKAGE:用於描述包
6. PARAMETER:用於描述參數
7. TYPE:用於描述類、接口(包括註解類型) 或enum聲明測試
b)@Retention:表示須要在什麼地方保存該註解信息,可選RetenttionPolicy參數。 spa
1.SOURCE:在源文件中有效(即源文件保留)code
2.CLASS:在class文件中有效(即class保留)接口
3.RUNTIME:在運行時有效(即運行時保留)get
java.lang.annotation:元註解都在裏面。
io
a)一個位置(類、屬性、方法)只有一種註解。
class
b)註解主要用來存放設定。
基礎
2.1 註解類
/** * @see 註釋 * * @author ssHss * */ @Target({ ElementType.TYPE, ElementType.FIELD }) @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { public enum MyEnum { ADD, EDIT, UPDATE, INSERT, DELETE } /** * @SEE 註解的屬性都是方法 * @author ssHss * */ public String name() default "fieldName"; public String getFunction() default "fieldName"; MyEnum[] doMyType() default MyEnum.ADD; public boolean defaultDBValue() default false; }
2.2 使用和解析
/** * @see 測試類 * @author ssHss * */ @MyAnnotation(defaultDBValue = false, getFunction = "ids", name = "myTestAnno_id", doMyType = { MyEnum.ADD }) public class MyTestAnno1 { public int id; @MyAnnotation(defaultDBValue = true, getFunction = "myTestAnno1", doMyType = { MyEnum.INSERT, MyEnum.EDIT }) public String myTestA; @MyAnnotation(defaultDBValue = false, name = "myTestAnno_id", doMyType = { MyEnum.UPDATE, MyEnum.DELETE }) public String myTestB; public static void main(String[] args) { System.out.println("CLASS start"); if (MyTestAnno1.class.isAnnotationPresent(MyAnnotation.class)) { MyAnnotation myan = MyTestAnno1.class.getAnnotation(MyAnnotation.class); System.out.println(myan); } System.out.println("FIELD start"); for (Field field : MyTestAnno1.class.getFields()) { if (field.isAnnotationPresent(MyAnnotation.class)) { MyAnnotation myan = MyTestAnno1.class.getAnnotation(MyAnnotation.class); System.out.println(myan); } } } }