java注解源碼閱讀

介紹

最近想深入了解一下java,就想到了來讀一讀java源碼。下面是我們的jdk版本炸枣,以及java注解所在的包。注解本質(zhì)是一個繼承了Annotation的特殊接口,其具體實現(xiàn)類是Java運行時生成的動態(tài)代理類适肠。通過代理對象調(diào)用自定義注解(接口)的方法霍衫,會最終調(diào)用AnnotationInvocationHandler的invoke方法。該方法會從memberValues這個Map中索引出對應(yīng)的值侯养。而memberValues的來源是Java常量池敦跌。

jdk版本1.8
package java.lang.annotation;

image.png

可以看的java注解在 rt.jar 下面的java.lang.annotation包中。

注解的分類

Java 1.5中開始引入的Annotation逛揩,類似于注釋解釋的一種技術(shù)柠傍,我們常常使用它在代碼中來做一些注釋,并且在適當(編譯代碼或運行代碼等時機)的時候辩稽,對其進行解釋惧笛,并且做一些額外的操作

下面我用idea自帶的diagram工具打開它們之間的聯(lián)系。

image.png

我們先來看看這兩個枚舉類:

  • ElementType: 這個枚舉類型的常量定義了注解適用的目標,結(jié)合Target注解使用

1.TYPE Class類逞泄,接口(包括注解類型或者enum類型)
2.FIELD 屬性(包括enum實例)
3.METHOD 方法
4.PARAMETER 方法參數(shù)
5.CONSTRUCTOR 類構(gòu)造器
6.LOCAL_VARIABLE 本地變量
7.ANNOTATION_TYPE 注解類型
8.PACKAGE 包

  • RetentionPolicy: 定義注解保存級別患整。 這個枚舉類型的常量描述保留注釋的各種政策。 他們結(jié)合使用 Retention元注解類型進行指定注解要保留多長時間炭懊。

1.SOURCE 源代碼注解并级,被編譯器丟棄
2.CLASS 類注解拂檩,被編譯器記錄在class文件中侮腹,運行時被VM丟棄,在編譯時使用稻励,屬于默認配置
3.RUNTIME 被編譯器記錄在class文件中父阻,運行時可用,被VM保留望抽,所以可以在運行時搭配反射使用

注解異常處理

下面三個類是注解的異常處理類加矛,注解類型不匹配異常,格式化異常

image.png

元注解

image.png
  • Annotation:定義了注解的常用方法
  • Documented:標志將此注解包含至javadoc中
  • Inherited: 注解允許繼承
  • Repeatable: 可以重復(fù)的注解 jdk 1.8新增
  • Retention: 定義注解保存級別
  • Target: 定義注解適用的目標
  • Native:表示一個定義常量值的字段可以從本機代碼被引用煤篙。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末斟览,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子辑奈,更是在濱河造成了極大的恐慌苛茂,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸠窗,死亡現(xiàn)場離奇詭異妓羊,居然都是意外死亡,警方通過查閱死者的電腦和手機稍计,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門躁绸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事净刮“疲” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵淹父,是天一觀的道長星持。 經(jīng)常有香客問我,道長弹灭,這世上最難降的妖魔是什么督暂? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮穷吮,結(jié)果婚禮上逻翁,老公的妹妹穿的比我還像新娘。我一直安慰自己捡鱼,他們只是感情好八回,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著驾诈,像睡著了一般缠诅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上乍迄,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天管引,我揣著相機與錄音,去河邊找鬼闯两。 笑死褥伴,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的漾狼。 我是一名探鬼主播重慢,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼逊躁!你這毒婦竟也來了似踱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤稽煤,失蹤者是張志新(化名)和其女友劉穎核芽,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體念脯,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡狞洋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了绿店。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吉懊。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡庐橙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出借嗽,到底是詐尸還是另有隱情态鳖,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布恶导,位于F島的核電站浆竭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏惨寿。R本人自食惡果不足惜邦泄,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望裂垦。 院中可真熱鬧顺囊,春花似錦、人聲如沸蕉拢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽晕换。三九已至午乓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間闸准,已是汗流浹背益愈。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留恕汇,地道東北人腕唧。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓或辖,卻偏偏與公主長得像瘾英,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子颂暇,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 本文章涉及代碼已放到github上annotation-study 1.Annotation為何而來 What:A...
    zlcook閱讀 29,185評論 15 116
  • 什么是注解(Annotation):Annotation(注解)就是Java提供了一種元程序中的元素關(guān)聯(lián)任何信息和...
    九尾喵的薛定諤閱讀 3,174評論 0 2
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理缺谴,服務(wù)發(fā)現(xiàn),斷路器耳鸯,智...
    卡卡羅2017閱讀 134,696評論 18 139
  • DP 這個是最常用但也最難理解的尺寸單位县爬。它與“像素密度”密切相關(guān)阳啥,所以 首先我們解釋一下什么是像素密度。假設(shè)有一...
    武玉朋_Horry閱讀 4,091評論 0 8
  • 最近斩狱,網(wǎng)上有個熱門話題,“男生什么舉動讓你瞬間死心扎瓶?” 有妹子義憤填膺地說所踊,“過馬路時,他自顧自地跑到了馬路對面概荷,...
    夏天的雪閱讀 480評論 3 1