java注解

注解,反射浩销,動態(tài)代理痒留∏绰螅基本框架都會用到的基本原理。
先看下注解:

什么是注解:

Java提供了一種元程序中的元素關聯(lián)任何信息和著任何元數據(metadata)的途徑和方法伸头,這是比較官方標準的定義匾效。

通俗些就是java提供的一個能標記的能力
最常見的用途恤磷,就是各種框架里面哼,通過反射來獲取指定程序元素的Annotion對象,然后判斷Annotion對象類型或者Annotion里的元數據扫步,來做對應的處理邏輯魔策。

注解的分類:
  1. JDK內置系統(tǒng)注解
  2. 元注解
  3. 自定義注解
JDK內置系統(tǒng)的注解
  • @Override:用于修飾此方法覆蓋了父類的方法;
  • @Deprecated:用于修飾已經過時的方法;
  • @SuppressWarnnings:用于通知java編譯器禁止特定的編譯警告。
元注解

元注解可以理解為注解的注解锌妻。元注解的作用就是負責注解其他注解
可以看到@Override注解就有元注解在修飾標注代乃。

image.png

元注解在jdk的lang.annotation包下能看到。jdk1.5提供了4個元注解。

@Target
用于描述注解的使用范圍(即:被描述的注解可以用在什么地方)
比如:METHOD:用于描述方法搁吓,上邊截圖的Override注解就只能作用在方法上原茅。TYPE:用于描述類、接口(包括注解類型) 或enum聲明堕仔,ElementType類有注釋

@Retention
表示需要在什么級別保存該注釋信息擂橘,用于描述注解的生命周期(即:被描述的注解在什么范圍內有效)。RetentionPolicy類有注釋
1.SOURCE:在源文件中有效(即源文件保留)
2.CLASS:在class文件中有效(即class保留)
3.RUNTIME:在運行時有效(即運行時保留)
比如上邊截圖的Override只是在源文件中有效摩骨,是為了保證編譯正確使用的注解通贞。
而sping的Controller注解就是在運行時有效,這樣注解處理器可以通過反射恼五,獲取到該注解的屬性值昌罩,從而去做一些運行時的邏輯處理

image.png

@Documented,@Inherited暫時沒有使用灾馒,等使用到了茎用,再來補充。

自定義注解

@interface關鍵字睬罗,java實現自定義注解的語法轨功。

使用@interface自定義注解時,自動繼承了java.lang.annotation.Annotation接口容达,由編譯程序自動完成其他細節(jié)古涧。在定義注解時,不能繼承其他的注解或接口花盐。@interface用來聲明一個注解羡滑,其中的每一個方法實際上是聲明了一個配置參數。方法的名稱就是參數的名稱卒暂,返回值類型就是參數的類型(返回值類型只能是基本類型啄栓、Class、String也祠、enum)。

比如實現一個自定義注解近速,web控制器標記:

package com.lxqn.jiapeng.spring.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Web控制器標記
 * @author jiapeng
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Controller {
}
注解信息的獲取

提供了標記的能力诈嘿,目的還是獲取這些注解信息。獲取主要用的是Class類的方法削葱,即反射奖亚。

  1. <T extends Annotation> T getAnnotation(Class<T> annotationClass): 返回改程序元素上存在的、指定類型的注解析砸,如果該類型注解不存在昔字,則返回null。
  2. Annotation[] getAnnotations():返回該程序元素上存在的所有注解。
  3. boolean is AnnotationPresent(Class<?extends Annotation> annotationClass):判斷該程序元素上是否包含指定類型的注解作郭,存在則返回true陨囊,否則返回false.
  4. Annotation[] getDeclaredAnnotations():返回直接存在于此元素上的所有注釋。與此接口中的其他方法不同夹攒,該方法將忽略繼承的注釋蜘醋。(如果沒有注釋直接存在于此元素上,則返回長度為零的一個數組咏尝。)該方法的調用者可以隨意修改返回的數組压语;這不會對其他調用者返回的數組產生任何影響。
    例子:

參考文章:
http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html
jdk1.8
spring-context-3.2.10

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末编检,一起剝皮案震驚了整個濱河市胎食,隨后出現的幾起案子,更是在濱河造成了極大的恐慌允懂,老刑警劉巖厕怜,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異累驮,居然都是意外死亡酣倾,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門谤专,熙熙樓的掌柜王于貴愁眉苦臉地迎上來躁锡,“玉大人,你說我怎么就攤上這事置侍∮持” “怎么了?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵蜡坊,是天一觀的道長杠输。 經常有香客問我,道長秕衙,這世上最難降的妖魔是什么蠢甲? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮据忘,結果婚禮上鹦牛,老公的妹妹穿的比我還像新娘。我一直安慰自己勇吊,他們只是感情好曼追,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著汉规,像睡著了一般礼殊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天晶伦,我揣著相機與錄音碟狞,去河邊找鬼。 笑死坝辫,一個胖子當著我的面吹牛篷就,可吹牛的內容都是我干的。 我是一名探鬼主播近忙,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼竭业,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了及舍?” 一聲冷哼從身側響起未辆,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锯玛,沒想到半個月后咐柜,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡攘残,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年拙友,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片歼郭。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡遗契,死狀恐怖,靈堂內的尸體忽然破棺而出病曾,到底是詐尸還是另有隱情牍蜂,我是刑警寧澤,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布泰涂,位于F島的核電站鲫竞,受9級特大地震影響,放射性物質發(fā)生泄漏逼蒙。R本人自食惡果不足惜从绘,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望是牢。 院中可真熱鬧顶考,春花似錦、人聲如沸妖泄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蹈胡。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間罚渐,已是汗流浹背却汉。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留荷并,地道東北人合砂。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像源织,于是被迫代替她去往敵國和親翩伪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內容