国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java中注解的工作原理

2019-11-26 14:45:08
字體:
來源:轉載
供稿:網友

自Java5.0版本引入注解之后,它就成為了Java平臺中非常重要的一部分。開發(fā)過程中,我們也時常在應用代碼中會看到諸如@Override,@Deprecated這樣的注解。這篇文章中,我將向大家講述到底什么是注解,為什么要引入注解,注解是如何工作的,如何編寫自定義的注解(通過例子),什么情況下可以使用注解以及最新注解和ADF(應用開發(fā)框架)。這會花點兒時間,所以為自己準備一杯咖啡,讓我們來進入注解的世界吧。

什么是注解?

用一個詞就可以描述注解,那就是元數據,即一種描述數據的數據。所以,可以說注解就是源代碼的元數據。比如,下面這段代碼:

@Overridepublic String toString() {  return "This is String Representation of current object.";}

上面的代碼中,我重寫了toString()方法并使用了@Override注解。但是,即使我不使用@Override注解標記代碼,程序也能夠正常執(zhí)行。那么,該注解表示什么?這么寫有什么好處嗎?事實上,@Override告訴編譯器這個方法是一個重寫方法(描述方法的元數據),如果父類中不存在該方法,編譯器便會報錯,提示該方法沒有重寫父類中的方法。如果我不小心拼寫錯誤,例如將toString()寫成了toStrring(){double r},而且我也沒有使用@Override注解,那程序依然能編譯運行。但運行結果會和我期望的大不相同。現在我們了解了什么是注解,并且使用注解有助于閱讀程序。

Annotation是一種應用于類、方法、參數、變量、構造器及包聲明中的特殊修飾符。它是一種由JSR-175標準選擇用來描述元數據的一種工具。

為什么要引入注解?

使用Annotation之前(甚至在使用之后),XML被廣泛的應用于描述元數據。不知何時開始一些應用開發(fā)人員和架構師發(fā)現XML的維護越來越糟糕了。他們希望使用一些和代碼緊耦合的東西,而不是像XML那樣和代碼是松耦合的(在某些情況下甚至是完全分離的)代碼描述。如果你在Google中搜索“XML vs. annotations”,會看到許多關于這個問題的辯論。最有趣的是XML配置其實就是為了分離代碼和配置而引入的。上述兩種觀點可能會讓你很疑惑,兩者觀點似乎構成了一種循環(huán),但各有利弊。下面我們通過一個例子來理解這兩者的區(qū)別。

假如你想為應用設置很多的常量或參數,這種情況下,XML是一個很好的選擇,因為它不會同特定的代碼相連。如果你想把某個方法聲明為服務,那么使用Annotation會更好一些,因為這種情況下需要注解和方法緊密耦合起來,開發(fā)人員也必須認識到這點。

另一個很重要的因素是Annotation定義了一種標準的描述元數據的方式。在這之前,開發(fā)人員通常使用他們自己的方式定義元數據。例如,使用標記interfaces,注釋,transient關鍵字等等。每個程序員按照自己的方式定義元數據,而不像Annotation這種標準的方式。

目前,許多框架將XML和Annotation兩種方式結合使用,平衡兩者之間的利弊。

Annotation是如何工作的?怎么編寫自定義的Annotation?

在講述這部分之前,建議你首先下載Annotation的示例代碼AnnotationsSample.zip 。下載之后放在你習慣使用的IDE中,這些代碼會幫助你更好的理解Annotation機制。

編寫Annotation非常簡單,可以將Annotation的定義同接口的定義進行比較。我們來看兩個例子:一個是標準的注解@Override,另一個是用戶自定義注解@Todo。

@Target(ElementType.METHOD)@Retention(RetentionPolicy.SOURCE)public @interface Override {}

對于@Override注釋你可能有些疑問,它什么都沒做,那它是如何檢查在父類中有一個同名的函數呢。當然,不要驚訝,我是逗你玩的。@Override注解的定義不僅僅只有這么一點代碼。這部分內容很重要,我不得不再次重復:Annotations僅僅是元數據,和業(yè)務邏輯無關。理解起來有點困難,但就是這樣。如果Annotations不包含業(yè)務邏輯,那么必須有人來實現這些邏輯。元數據的用戶來做這個事情。Annotations僅僅提供它定義的屬性(類/方法/包/域)的信息。Annotations的用戶(同樣是一些代碼)來讀取這些信息并實現必要的邏輯。

當我們使用Java的標注Annotations(例如@Override)時,JVM就是一個用戶,它在字節(jié)碼層面工作。到這里,應用開發(fā)人員還不能控制也不能使用自定義的注解。因此,我們講解一下如何編寫自定義的Annotations。

我們來逐個講述編寫自定義Annotations的要點。上面的例子中,你看到一些注解應用在注解上。

J2SE5.0版本在 java.lang.annotation提供了四種元注解,專門注解其他的注解: