@Repeatable注解的用法

1. Repeatable注解的定義

java8以后支持在同一個地方(某個方法或者某個類等)加上相同的注解,前提是要使用@Repeatable注解,但是在用之前必須知道如何定義一個自定義注解:
自定義注解示例:

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
@Repeatable(ActionUnlockChecks.class)
public @interface ActionUnlockCheck {
    int actionType();
}
  • @Retention
    @Retention注解有一個屬性value蹦哼,是RetentionPolicy枚舉類型Rentention搭配RententionPolicy使用。RetentionPolicy有3個值:CLASS RUNTIME SOURCE
    按生命周期來劃分可分為3類:
    RetentionPolicy.SOURCE:注解只保留在源文件,當Java文件編譯成class文件的時候沦零,注解被遺棄;
    RetentionPolicy.CLASS:注解被保留到class文件货岭,但jvm加載class文件時候被遺棄路操,這是默認的生命周期疾渴;
    RetentionPolicy.RUNTIME:注解不僅被保存到class文件中,jvm加載class文件之后屯仗,仍然存在搞坝;
    一般要用反射獲得注解就要使用RUNTIME

  • @Target
    注解的作用域,屬性value是數(shù)組魁袜,可以如示例所示填多個作用域桩撮,常用的有:TYPE,METHOD,PARAMETER,CONSTRUCTOR

  • @Repeatable
    屬性value的類型是Class類型,這里創(chuàng)建了一個另一個自定義注解峰弹,后面稱之為父注解店量,之前的稱之為子注解,示例代碼如下:

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface ActionUnlockChecks {
    ActionUnlockCheck[]  value();
}

父注解必須有以下特征:
1:作用域必須大于等于子注解
2:父注解的周期要比子注解的周期要小或相同(注意:SOURCE(源碼) < CLASS (字節(jié)碼) < RUNTIME(運行))
3:父注解的value的類型是子注解類型的數(shù)組

2. Repeatable注解與反射

java反射是可以得到作用域RUNTIME的注解的鞠呈,通過比如java.lang.Class#getAnnotation方法:

        ActionUnlockCheck annotation = joinPoint.getTarget().getClass().getAnnotation(ActionUnlockCheck.class);

但是這就有疑問了:既然注解是可重復的融师,那這個方法的返回值應該是數(shù)組而不是單個?
于是略加研究后發(fā)現(xiàn)蚁吝,當我重復定義了@ActionUnlockCheck時旱爆,其實經過編譯后,字節(jié)碼class內部是這樣的:

@ActionUnlockChecks({@ActionUnlockCheck(
    actionType = 114
), @ActionUnlockCheck(
    actionType = 113
)})

也就是說多個子注解其實會被轉換成一個父注解灭将。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末疼鸟,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子庙曙,更是在濱河造成了極大的恐慌空镜,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捌朴,死亡現(xiàn)場離奇詭異吴攒,居然都是意外死亡,警方通過查閱死者的電腦和手機砂蔽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門洼怔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人左驾,你說我怎么就攤上這事镣隶。” “怎么了诡右?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵安岂,是天一觀的道長。 經常有香客問我帆吻,道長域那,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任猜煮,我火速辦了婚禮次员,結果婚禮上败许,老公的妹妹穿的比我還像新娘。我一直安慰自己淑蔚,他們只是感情好市殷,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著束倍,像睡著了一般被丧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上绪妹,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天甥桂,我揣著相機與錄音,去河邊找鬼邮旷。 笑死黄选,一個胖子當著我的面吹牛,可吹牛的內容都是我干的婶肩。 我是一名探鬼主播办陷,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼律歼!你這毒婦竟也來了民镜?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤险毁,失蹤者是張志新(化名)和其女友劉穎制圈,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體畔况,經...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡鲸鹦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了跷跪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片馋嗜。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖吵瞻,靈堂內的尸體忽然破棺而出葛菇,到底是詐尸還是另有隱情,我是刑警寧澤橡羞,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布熟呛,位于F島的核電站,受9級特大地震影響尉姨,放射性物質發(fā)生泄漏。R本人自食惡果不足惜吗冤,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一又厉、第九天 我趴在偏房一處隱蔽的房頂上張望九府。 院中可真熱鬧,春花似錦覆致、人聲如沸侄旬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽儡羔。三九已至,卻和暖如春璧诵,著一層夾襖步出監(jiān)牢的瞬間汰蜘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工之宿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留族操,地道東北人。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓比被,卻偏偏與公主長得像色难,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子等缀,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內容