1、註解的意義和做用html
首先要明白註解的意義和做用,才能明白在那個時候使用註解。百度百科解釋Java註解是這樣介紹的:Annotation(註解)即爲元數據。下面爲元數據的做用:java
編寫文檔:經過代碼裏標識的元數據生成文檔。spring
代碼分析:經過代碼裏標識的元數據對代碼進行分析。數組
編譯檢查:經過代碼裏標識的元數據讓編譯器能實現基本的編譯檢查。app
其實不用這樣理解,我是這樣理解的:註解至關於一種標記,在程序中加了註解就等於爲程序打上了某種標記,沒加,則等於沒有某種標記,之後,javac編譯器,開發工具和其餘程序能夠用反射來了解你的類及各類元素上有無何種標記,看你有什麼標記,就去幹相應的事。標記能夠加在包,類,字段,方法,方法的參數以及局部變量上。ide
以上講的仍是沒有講到Java註解和spring標籤的區別究竟是怎麼回事,只講了Java註解的做用。工具
實現咱們從導入的包來看,Java註解導入的包是:import java.lang.annotation;spring標籤導入的包是:import org.springframework.beans.factory.annotation.Autowired,拿@Autowired來講。你會發現其實都是Annotation,標籤和註解實際上是一個意思的。只是每一個地方說的不同而已。開發工具
2、自定義Java註解ui
使用@interface自定義註解時,自動繼承了java.lang.annotation.Annotation接口,由編譯程序自動完成其餘細節。在定義註解時,不能繼承其餘的註解或接口。@interface用來聲明一個註解,其中的每個方法其實是聲明瞭一個配置參數。方法的名稱就是參數的名稱,返回值類型就是參數的類型(返回值類型只能是基本類型、Class、String、enum)。能夠經過default來聲明參數的默認值。this
定義註解格式:
public @interface 註解名 {定義體}
註解參數的可支持數據類型:
1.全部基本數據類型(int,float,boolean,byte,double,char,long,short)
2.String類型
3.Class類型
4.enum類型
5.Annotation類型
6.以上全部類型的數組
Annotation類型裏面的參數該怎麼設定:
第一,只能用public或默認(default)這兩個訪問權修飾.例如,String value();這裏把方法設爲defaul默認類型;
第二,參數成員只能用基本類型byte,short,char,int,long,float,double,boolean八種基本數據類型和 String,Enum,Class,annotations等數據類型,以及這一些類型的數組.例如,String value();這裏的參數成員就爲String;
第三,若是隻有一個參數成員,最好把參數名稱設爲"value",後加小括號.例:下面的例子FruitName註解就只有一個參數成員。
簡單的自定義註解和使用註解實例:
package annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 水果名稱註解 * @author peida * */ @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface FruitName { String value() default ""; }
package annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 水果顏色註解 * @author peida * */ @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface FruitColor { /** * 顏色枚舉 * @author peida * */ public enum Color{ BULE,RED,GREEN}; /** * 顏色屬性 * @return */ Color fruitColor() default Color.GREEN; }
package annotation; import annotation.FruitColor.Color; public class Apple { @FruitName("Apple") private String appleName; @FruitColor(fruitColor=Color.RED) private String appleColor; public void setAppleColor(String appleColor) { this.appleColor = appleColor; } public String getAppleColor() { return appleColor; } public void setAppleName(String appleName) { this.appleName = appleName; } public String getAppleName() { return appleName; } public void displayName(){ System.out.println("水果的名字是:蘋果"); } }
註解元素的默認值:
註解元素必須有肯定的值,要麼在定義註解的默認值中指定,要麼在使用註解時指定,非基本類型的註解元素的值不可爲null。所以, 使用空字符串或0做爲默認值是一種經常使用的作法。這個約束使得處理器很難表現一個元素的存在或缺失的狀態,由於每一個註解的聲明中,全部元素都存在,而且都具備相應的值,爲了繞開這個約束,咱們只能定義一些特殊的值,例如空字符串或者負數,一次表示某個元素不存在,在定義註解時,這已經成爲一個習慣用法。例如:
1 package annotation; 2 3 import java.lang.annotation.Documented; 4 import java.lang.annotation.ElementType; 5 import java.lang.annotation.Retention; 6 import java.lang.annotation.RetentionPolicy; 7 import java.lang.annotation.Target; 8 9 /** 10 * 水果供應者註解 11 * @author peida 12 * 13 */ 14 @Target(ElementType.FIELD) 15 @Retention(RetentionPolicy.RUNTIME) 16 @Documented 17 public @interface FruitProvider { 18 /** 19 * 供應商編號 20 * @return 21 */ 22 public int id() default -1; 23 24 /** 25 * 供應商名稱 26 * @return 27 */ 28 public String name() default ""; 29 30 /** 31 * 供應商地址 32 * @return 33 */ 34 public String address() default ""; 35 }
4、spring自定義標籤
下面不進行詳細講解,轉載一篇文章:http://www.open-open.com/lib/view/open1452173435261.html。