java基礎之註解

java基礎之註解

一. 概述

    1.1 簡介

        java的三大高級特性之一,是JDK的1.5的引進。註解將廣大的javaer從拿巨大的XML配置文件中解放處理,專一與業務代碼。同時大大減低了框架的上手難度。註解使用先建立一個註解類,在正常的類中使用,而後經過反射獲取其值。java

    1.2 元註解

        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

    1.3 java相關類:

        java.lang.annotation:元註解都在裏面。
io

    1.4 總結:

        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);
			}
		}
	}
}
相關文章
相關標籤/搜索