JAVA注解原理 - 感性認(rèn)識(shí)

一、什么是注解?

注解的英文是annotation谈火,就是使用@符號(hào)來(lái)標(biāo)注類(lèi)侈询、方法、類(lèi)成員糯耍、局部變量扔字、方法參數(shù)等。用于表示一些特殊的含義温技。比如我們常見(jiàn)的@Controller, @Service, @Repository, @Autowired等革为。

二、為什么要有注解? 注解有什么作用?

我理解這跟編程思想中的DRY(don't repeat yourself)的原則是吻合的舵鳞。用統(tǒng)一的一個(gè)標(biāo)識(shí)符@來(lái)標(biāo)識(shí)一組具有相同屬性的對(duì)象震檩。
在Spring中,框架會(huì)自動(dòng)掃描被標(biāo)注的類(lèi)蜓堕,并把使用@Componet標(biāo)注的類(lèi)以bean的形式注入到框架中抛虏。方便供框架管理這些類(lèi)的創(chuàng)建與銷(xiāo)毀。
我們常用的JUnit俩滥,也會(huì)自動(dòng)掃描被@Test標(biāo)注的方法嘉蕾,認(rèn)為它們是單獨(dú)供JUnit框架管理的單測(cè)方法。
所以霜旧,使用注解,就是為了方便我們?yōu)轭?lèi)、方法挂据、屬性以清、參數(shù)等對(duì)象打一個(gè)標(biāo)簽,做一個(gè)標(biāo)識(shí)崎逃。開(kāi)發(fā)框架或架構(gòu)師可以根據(jù)這些標(biāo)識(shí)做自己的邏輯處理掷倔。

三、如何實(shí)現(xiàn)自定義注解?

3.1 通過(guò)元注解來(lái)實(shí)現(xiàn)注解

拿我們經(jīng)常用到的@Autowired來(lái)舉例个绍,

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {

    /**
     * Declares whether the annotated dependency is required.
     * <p>Defaults to {@code true}.
     */
    boolean required() default true;

}

解釋:
通過(guò) @interface 來(lái)聲明一個(gè)注解勒葱。

@Target 說(shuō)明注解所修飾的對(duì)象范圍,取值的話巴柿,有

  1. CONSTRUCTOR: 構(gòu)造器
  2. FIELD: 域
  3. LOCAL_VARIABLE: 局部變量
  4. METHOD: 方法
  5. PACKAGE: 包
  6. PARAMETER: 參數(shù)
  7. TYPE: 類(lèi)凛虽、接口、enum聲明

@Retention描述注解的生命周期广恢,在什么時(shí)候生效凯旋,有3個(gè)

  1. SOURCE
  2. CLASS
  3. RUNTIME

@Documented說(shuō)明可被javadoc此類(lèi)工具文檔化

@Inherited說(shuō)明被標(biāo)注的類(lèi)型是被繼承的(// TODO 舉例說(shuō)明)

3.2 如何獲取注解名與值

通過(guò)反射。關(guān)于什么是反射钉迷,會(huì)單獨(dú)寫(xiě)一個(gè)筆記來(lái)記錄至非。在這里,我們先有一個(gè)概念糠聪,就是可以通過(guò)某一種方法來(lái)獲取注解的名稱荒椭,以及其中的值。
// todo 舉例

@Hello
public class Any {

}

屬性上的

@Hello
private String name;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末舰蟆,一起剝皮案震驚了整個(gè)濱河市戳杀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌夭苗,老刑警劉巖信卡,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異题造,居然都是意外死亡傍菇,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)界赔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)丢习,“玉大人,你說(shuō)我怎么就攤上這事淮悼「赖停” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵袜腥,是天一觀的道長(zhǎng)见擦。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么鲤屡? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任损痰,我火速辦了婚禮,結(jié)果婚禮上酒来,老公的妹妹穿的比我還像新娘卢未。我一直安慰自己,他們只是感情好堰汉,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布辽社。 她就那樣靜靜地躺著,像睡著了一般翘鸭。 火紅的嫁衣襯著肌膚如雪滴铅。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天矮固,我揣著相機(jī)與錄音失息,去河邊找鬼。 笑死档址,一個(gè)胖子當(dāng)著我的面吹牛盹兢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播守伸,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼绎秒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了尼摹?” 一聲冷哼從身側(cè)響起见芹,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蠢涝,沒(méi)想到半個(gè)月后玄呛,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡和二,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年徘铝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惯吕。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡惕它,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出废登,到底是詐尸還是另有隱情淹魄,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布堡距,位于F島的核電站甲锡,受9級(jí)特大地震影響兆蕉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜搔体,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一恨樟、第九天 我趴在偏房一處隱蔽的房頂上張望半醉。 院中可真熱鬧疚俱,春花似錦、人聲如沸缩多。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)衬吆。三九已至梁钾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間逊抡,已是汗流浹背姆泻。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留冒嫡,地道東北人拇勃。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像孝凌,于是被迫代替她去往敵國(guó)和親方咆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理蟀架,服務(wù)發(fā)現(xiàn)瓣赂,斷路器,智...
    卡卡羅2017閱讀 134,638評(píng)論 18 139
  • 什么是注解 注解對(duì)于開(kāi)發(fā)人員來(lái)講既熟悉又陌生片拍,熟悉是因?yàn)橹灰闶亲鲩_(kāi)發(fā)煌集,都會(huì)用到注解(常見(jiàn)的@Override);...
    張明云閱讀 25,140評(píng)論 6 154
  • 最近捌省,北京打工的肓兒嫂范雨素火了苫纤。因?yàn)橐黄腥酥辽睿屒f(wàn)人為之動(dòng)容的文章所禀。 看她的照片一一 樸素方面,平凡,簡(jiǎn)單色徘,像...
    般若秋雪閱讀 505評(píng)論 1 11
  • Unix指令 //在輸入文件明時(shí)恭金,按tab鍵可以提示輸出所要的文件名 open +文件名 ——打開(kāi)當(dāng)前路徑的文件 ...
    CharlesAn閱讀 378評(píng)論 0 1
  • 第一招 每天早上一上班,在心里喊:我最重要的KPI是XXX 你每天打開(kāi)電腦褂策,面對(duì)一百多封未讀郵件横腿, 你每天接觸十來(lái)...
    一刀職場(chǎng)閱讀 278評(píng)論 0 0