註解是Java1.5,JDK5.0引用的技術,與類,接口,枚舉處於同一層次 。它能夠聲明在包、類、字段、方法、局部變量、方法參數等的前面,用來對這些元素進行說明,註釋 。java
在Java中,自帶了三種註解,這三種註解存在於java.lang包中,首先咱們講一講這些註解spring
首先,自定義註解咱們必須瞭解四個元註解,什麼是元註解?元註解指做用於註解之上的元數據或者元信息,簡單通俗的講,元註解就是註解的註解 .編程
Documented與Inherited是典型的標識性註解,也就是說在註解內部並無成員變量,沒有成員變量的註解稱爲標識註解
Target主要的參數類型包括如下幾種數組
Retention主要的參數類型包括如下幾種ide
自定義註解工具
註解的定義spa
註解中能夠定義的數據類型是受到限制的,除了基本類型以外,String,Enums,Annotation,Class以及這些類型的數組 code
package com.deng.spring; import org.springframework.context.annotation.Scope; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** 用於指定該註解的做用範圍,能夠指定一個或者多個 ElementType.TYPE 用於類,接口,枚舉但不能是註解 ElementType.FIELD 做用於字段,包含枚舉值 ElementType.METHOD 做用於方法,不包含構造方法 ElementType.PARAMETER 做用於方法的參數 ElementType.CONSTRUCTOR 做用於構造方法 ElementType.LOCAL_VERIABLE 做用於本地變量或者catch語句 ElementType.ANNOTATION_TYPE 做用於註解 ElementType.PACKAGE 做用於包 */ @Target({ElementType.TYPE,ElementType.METHOD}) /** * 定義該註解的做用域 * RetentionPolicy.SOURCE 註解存在於源代碼中,編譯時會被拋棄 RetentionPolicy.CLASS 註解會被編譯到class文件中,可是JVM會忽略 RetentionPolicy.RUNTIME JVM會讀取註解,同時會保存到class文件中 */ @Retention(RetentionPolicy.RUNTIME) //@interface定義註解的關鍵詞 //註解的名稱爲Animal public @interface Animal { /** //定義成員變量 語法爲 數據類型 成員變量名() default 默認值; //成員變量能夠經過default指定默認值 //若是成員變量不指定默認值的狀況下 //咱們在使用註解時則必須給沒有默認值的成員變量賦值 PS: 成員變量名爲value時,使用註解的時候能夠不指定成員變量名,直接設置一個值 註解中成員變量能夠定義的數據類型是受到限制的,除了基本類型以外,String, Enums,Annotation,Class以及這些類型的數組 */ String value() ; public String color() ; }
註解的使用blog
package com.deng.spring; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; @Animal(value = "dog",color = "red") public class Dog { private String name; }
註解的解析繼承
Class c = Dog.class; Annotation[] as = c.getAnnotations(); for(Annotation a : as){ if(a instanceof Animal){ Animal am = (Animal)a; //獲取成員變量的值 System.out.println("value = " + am.value()); System.out.println("color = " + am.color()); } }