Annotation(注解)就是Java提供了一種為程序元素關(guān)聯(lián)任何信息或任何元數(shù)據(jù)(metadata)的途徑和方法。Annotion(注解)是一個(gè)接口,程序可以通過反射來獲取指定程序元素的Annotion對象,然后通過Annotion對象來獲取注解里面的元數(shù)據(jù)。
Annotation(注解)是JDK5.0及以后版本引入的。它可以用于創(chuàng)建文檔,跟蹤代碼中的依賴性,甚至執(zhí)行基本編譯時(shí)檢查。從某些方面看,annotation就像修飾符一樣被使用,并應(yīng)用于包、類型、構(gòu)造方法、方法、成員變量、參數(shù)、本地變量的聲明中。這些信息被存儲(chǔ)在Annotation的“name=value”結(jié)構(gòu)對中。
Annotation的成員在Annotation類型中以無參數(shù)的方法的形式被聲明。其方法名和返回值定義了該成員的名字和類型。在此有一個(gè)特定的默認(rèn) 語法:允許聲明任何Annotation成員的默認(rèn)值。一個(gè)Annotation可以將name=value對作為沒有定義默認(rèn)值的Annotation 成員的值,當(dāng)然也可以使用name=value對來覆蓋其它成員默認(rèn)值。這一點(diǎn)有些近似類的繼承特性,父類的構(gòu)造函數(shù)可以作為子類的默認(rèn)構(gòu)造函數(shù),但是也 可以被子類覆蓋。
Annotation能被用來為某個(gè)程序元素(類、方法、成員變量等)關(guān)聯(lián)任何的信息。需要注意的是,這里存在著一個(gè)基本的規(guī)則:Annotation不能影響程序代碼的執(zhí)行,無論增加、刪除 Annotation,代碼都始終如一的執(zhí)行。另外,盡管一些annotation通過java的反射api方法在運(yùn)行時(shí)被訪問,而java語言解釋器在工作時(shí)忽略了這些annotation。正是由于java虛擬機(jī)忽略了Annotation,導(dǎo)致了annotation類型在代碼中是“不起作用”的; 只有通過某種配套的工具才會(huì)對annotation類型中的信息進(jìn)行訪問和處理
注解(Annotation) 為我們在代碼中添加信息提供了一種形式化的方法,是我們可以在稍后 某個(gè)時(shí)刻方便地使用這些數(shù)據(jù)(通過 解析注解 來使用這些數(shù)據(jù)),常見的作用有以下幾種:
● 生成文檔。這是最常見的,也是java 最早提供的注解。常用的有@see @param @return 等;
● 在編譯時(shí)進(jìn)行格式檢查。如@Override放在方法前,如果你這個(gè)方法并不是覆蓋了超類方法,則編譯時(shí)就能檢查出;
● 跟蹤代碼依賴性,實(shí)現(xiàn)替代配置文件功能。比較常見的是spring 2.5 開始的基于注解配置。作用就是減少配置。現(xiàn)在的框架基本都使用了這種配置來減少配置文件的數(shù)量;