Java深度歷險(六)——Java注解

Java深度歷險(六)——Java注解

ID:42562185

大?。?6.14 KB

頁數(shù):5頁

時間:2019-09-17

Java深度歷險(六)——Java注解_第1頁
Java深度歷險(六)——Java注解_第2頁
Java深度歷險(六)——Java注解_第3頁
Java深度歷險(六)——Java注解_第4頁
Java深度歷險(六)——Java注解_第5頁
資源描述:

《Java深度歷險(六)——Java注解》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、Java深度歷險(六)——Java注解?在開發(fā)Java程序,尤其是JavaEE應(yīng)用的時候,總是免不了與各種配置文件打交道。以JavaEE中典型的S(pring)S(truts)H(ibernate)架構(gòu)來說,Spring、Struts和Hibernate這三個框架都有自己的XML格式的配置文件。這些配置文件需要與Java源代碼保存同步,否則的話就可能出現(xiàn)錯誤。而且這些錯誤有可能到了運行時刻才被發(fā)現(xiàn)。把同一份信息保存在兩個地方,總是個壞的主意。理想的情況是在一個地方維護(hù)這些信息就好了。其它部分所需的信息則通過自動的方式來生成。JDK

2、5中引入了源代碼中的注解(annotation)這一機(jī)制。注解使得Java源代碼中不但可以包含功能性的實現(xiàn)代碼,還可以添加元數(shù)據(jù)。注解的功能類似于代碼中的注釋,所不同的是注解不是提供代碼功能的說明,而是實現(xiàn)程序功能的重要組成部分。Java注解已經(jīng)在很多框架中得到了廣泛的使用,用來簡化程序中的配置。使用注解在一般的Java開發(fā)中,最常接觸到的可能就是@Override和@SupressWarnings這兩個注解了。使用@Override的時候只需要一個簡單的聲明即可。這種稱為標(biāo)記注解(markerannotation),它的出現(xiàn)就代

3、表了某種配置語義。而其它的注解是可以有自己的配置參數(shù)的。配置參數(shù)以名值對的方式出現(xiàn)。使用@SupressWarnings的時候需要類似@SupressWarnings({"uncheck","unused"})這樣的語法。在括號里面的是該注解可供配置的值。由于這個注解只有一個配置參數(shù),該參數(shù)的名稱默認(rèn)為value,并且可以省略。而花括號則表示是數(shù)組類型。在JPA中的@Table注解使用類似@Table(name="Customer",schema="APP")這樣的語法。從這里可以看到名值對的用法。在使用注解時候的配置參數(shù)的值必須

4、是編譯時刻的常量。從某種角度來說,可以把注解看成是一個XML元素,該元素可以有不同的預(yù)定義的屬性。而屬性的值是可以在聲明該元素的時候自行指定的。在代碼中使用注解,就相當(dāng)于把一部分元數(shù)據(jù)從XML文件移到了代碼本身之中,在一個地方管理和維護(hù)。開發(fā)注解在一般的開發(fā)中,只需要通過閱讀相關(guān)的API文檔來了解每個注解的配置參數(shù)的含義,并在代碼中正確使用即可。在有些情況下,可能會需要開發(fā)自己的注解。這在庫的開發(fā)中比較常見。注解的定義有點類似接口。下面的代碼給出了一個簡單的描述代碼分工安排的注解。通過該注解可以在源代碼中記錄每個類或接口的分工和進(jìn)

5、度情況。@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)public@interfaceAssignment{Stringassignee();inteffort();doublefinished()default0;}@interface用來聲明一個注解,其中的每一個方法實際上是聲明了一個配置參數(shù)。方法的名稱就是參數(shù)的名稱,返回值類型就是參數(shù)的類型??梢酝ㄟ^default來聲明參數(shù)的默認(rèn)值。在這里可以看到@Retention和@Target這樣的元注解,用來

6、聲明注解本身的行為。@Retention用來聲明注解的保留策略,有CLASS、RUNTIME和SOURCE這三種,分別表示注解保存在類文件、JVM運行時刻和源代碼中。只有當(dāng)聲明為RUNTIME的時候,才能夠在運行時刻通過反射API來獲取到注解的信息。@Target用來聲明注解可以被添加在哪些類型的元素上,如類型、方法和域等。處理注解在程序中添加的注解,可以在編譯時刻或是運行時刻來進(jìn)行處理。在編譯時刻處理的時候,是分成多趟來進(jìn)行的。如果在某趟處理中產(chǎn)生了新的Java源文件,那么就需要另外一趟處理來處理新生成的源文件。如此往復(fù),直到?jīng)]

7、有新文件被生成為止。在完成處理之后,再對Java代碼進(jìn)行編譯。JDK5中提供了apt工具用來對注解進(jìn)行處理。apt是一個命令行工具,與之配套的還有一套用來描述程序語義結(jié)構(gòu)的MirrorAPI。MirrorAPI(com.sun.mirror.*)描述的是程序在編譯時刻的靜態(tài)結(jié)構(gòu)。通過MirrorAPI可以獲取到被注解的Java類型元素的信息,從而提供相應(yīng)的處理邏輯。具體的處理工作交給apt工具來完成。編寫注解處理器的核心是AnnotationProcessorFactory和AnnotationProcessor兩個接口。后者表示

8、的是注解處理器,而前者則是為某些注解類型創(chuàng)建注解處理器的工廠。以上面的注解Assignment為例,當(dāng)每個開發(fā)人員都在源代碼中更新進(jìn)度的話,就可以通過一個注解處理器來生成一個項目整體進(jìn)度的報告。首先是注解處理器工廠的實現(xiàn)。publicclassAs

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。