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