最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java的多重注解(重復(fù)注解)詳解

 更新時(shí)間:2026年01月31日 09:15:44   作者:wal1314520  
文章主要講述了Java中多重注解的使用,包括Java7和Java8兩種方式,在Java7中,通過(guò)自定義注解容器來(lái)實(shí)現(xiàn)多重注解;而在Java8中,可以使用@Repeatable注解來(lái)實(shí)現(xiàn)多重注解,使代碼更加簡(jiǎn)潔

java的多重注解

本來(lái)早就寫(xiě)這一篇的,后來(lái)一直有別的事拖住了,然后就把它給忘了。前段時(shí)間看代碼時(shí),無(wú)意中看到了當(dāng)時(shí)寫(xiě)的多重注解,覺(jué)得還是有必要寫(xiě)點(diǎn)東西的,雖然不是很難,但是對(duì)沒(méi)有接觸過(guò)的來(lái)說(shuō),有一份關(guān)于它的文章總比沒(méi)有強(qiáng)。

以前也沒(méi)用到過(guò)多重注解

一次一個(gè)需求來(lái)了之后,發(fā)覺(jué)和之前的一個(gè)功能有點(diǎn)沖突,重新寫(xiě)一個(gè)方法又覺(jué)得多余,就考慮到這個(gè)多重注解上來(lái)了。但是java 7沒(méi)有多重注解相關(guān)的,只有自定義注解,后來(lái)查了資料發(fā)覺(jué)java 8 增加的新特性有多重注解,但是我們的項(xiàng)目是jdk7的,肯定沒(méi)辦法換成8的,只好自己研究了,然后花了點(diǎn)時(shí)間,查了點(diǎn)資料最后把這個(gè)問(wèn)題解決了。 下面我就針對(duì)java 7和java 8兩種不同的方式講一下這個(gè)多重注解。

在我的項(xiàng)目里的自定義注解是權(quán)限注解,用的是java 7的方法。

  • 代碼如下:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@Scope("request")
public @interface AuthValidation
{
         String actionOfMenu();
         String actionType();
}

我需要一個(gè)多重注解

于是就想到了用容器來(lái)盛放,那不就是多重注解了嘛,所以就用了個(gè)數(shù)組存放。

  • 代碼如下:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@Scope("request")
public @interface AuthValidations
{
         AuthValidation[]value();
}

在實(shí)際的使用過(guò)程中也很簡(jiǎn)單

就是把原來(lái)的注解變成注解容器就好了,原來(lái)的注解是

@AuthValidation(actionOfMenu=Constant.Constant.MENU_ACTION_CASE,actionType="Constant.ACTION_TYPE_SEARCH")

修改為注解容器后,就變成

@AuthValidations({
@AuthValidation(actionOfMenu=Constant.MENU_ACTION_INFO,actionType=Constant.ACTION_TYPE_SEARCH),
@AuthValidation(actionOfMenu=Constant.MENU_ACTION_CFD,actionType=Constant.ACTION_TYPE_SEARCH),
@AuthValidation(actionOfMenu=Constant.MENU_ACTION_CASE,actionType=Constant.ACTION_TYPE_SEARCH),
@AuthValidation(actionOfMenu=Constant.MENU_ACTION_FILE,actionType=Constant.ACTION_TYPE_SEARCH)
})
public String refreshGridModel() { return super.refreshGridModel(); }

在攔截器上就把之前的權(quán)限注解的驗(yàn)證,變成權(quán)限注解容器的驗(yàn)證,之前是通過(guò)反射獲取的注解,現(xiàn)在是通過(guò)反射獲取注解容器也就是注解數(shù)組,然后再遍歷驗(yàn)證就可以了。

在java 8里面,多重注解是一個(gè)新特性

也使多重注解簡(jiǎn)單很多。java 8允許我們把同一個(gè)類型的注解使用多次,只需要給該注解標(biāo)注一下@Repeatable即可。

  • 代碼如下:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@Scope("request")
@Repeatable(AuthValidations.class)
public @interface AuthValidation
{
         String actionOfMenu();
         String actionType();
}

注解容器代碼如下:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@Scope("request")
public @interface AuthValidations
{
         AuthValidation[]value();
}

只需要在自定義注解上添加@Repeatable(AuthValidations.class)即可。

在使用時(shí),也只需要重復(fù)使用就可以了,即:

@AuthValidation(actionOfMenu=Constant.MENU_ACTION_INFO,actionType=Constant.ACTION_TYPE_SEARCH)
@AuthValidation(actionOfMenu=Constant.MENU_ACTION_CFD,actionType=Constant.ACTION_TYPE_SEARCH)
@AuthValidation(actionOfMenu=Constant.MENU_ACTION_CASE,actionType=Constant.ACTION_TYPE_SEARCH)
@AuthValidation(actionOfMenu=Constant.MENU_ACTION_FILE,actionType=Constant.ACTION_TYPE_SEARCH)
public String refreshGridModel() { returnsuper.refreshGridModel();}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • JAVA集合框架工具類自定義Collections集合方法

    JAVA集合框架工具類自定義Collections集合方法

    今天小編就為大家分享一篇關(guān)于JAVA集合框架工具類自定義Collections集合方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • 如何在Java中獲取當(dāng)前年份(實(shí)例代碼)

    如何在Java中獲取當(dāng)前年份(實(shí)例代碼)

    在Java語(yǔ)言中獲取當(dāng)前年份有幾種方法:使用java.util包下的Calendar類,使用java.time包下的LocalDate類或者使用java.text包下的SimpleDateFormat類,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2023-11-11
  • 更改Maven軟件源為阿里云源的方法詳解

    更改Maven軟件源為阿里云源的方法詳解

    這篇文章主要介紹了更改Maven軟件源為阿里云源的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • SpringBoot中的Bean注入問(wèn)題

    SpringBoot中的Bean注入問(wèn)題

    SpringBoot開(kāi)發(fā)中,Bean注入是關(guān)鍵,涉及構(gòu)造函數(shù)注入、Setter注入和字段注入等方法,常見(jiàn)問(wèn)題包括Bean未找到、循環(huán)依賴、多個(gè)實(shí)現(xiàn)注入等,推薦使用構(gòu)造函數(shù)注入以增強(qiáng)代碼測(cè)試性和維護(hù)性,并關(guān)注Bean的生命周期和作用域
    2024-09-09
  • java獲取文件擴(kuò)展名的方法小結(jié)【正則與字符串截取】

    java獲取文件擴(kuò)展名的方法小結(jié)【正則與字符串截取】

    這篇文章主要介紹了java獲取文件擴(kuò)展名的方法,結(jié)合實(shí)例形式分析了使用正則與字符串截取兩種獲取擴(kuò)展名的操作技巧,需要的朋友可以參考下
    2017-01-01
  • Spring中IOC和AOP的深入講解

    Spring中IOC和AOP的深入講解

    這篇文章主要給大家介紹了關(guān)于Spring中IOC和AOP的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • SpringMVC 跨重定向請(qǐng)求傳遞數(shù)據(jù)的方法實(shí)現(xiàn)

    SpringMVC 跨重定向請(qǐng)求傳遞數(shù)據(jù)的方法實(shí)現(xiàn)

    這篇文章主要介紹了SpringMVC 跨重定向請(qǐng)求傳遞數(shù)據(jù)的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Java定時(shí)任務(wù)schedule和scheduleAtFixedRate的異同

    Java定時(shí)任務(wù)schedule和scheduleAtFixedRate的異同

    本文主要介紹了Java定時(shí)任務(wù)schedule和scheduleAtFixedRate的異同,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 聊聊Object類中的wait()和notify()方法

    聊聊Object類中的wait()和notify()方法

    這篇文章主要介紹了Object類中的wait()和notify()方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java String.format()的用法

    Java String.format()的用法

    本篇文章主要介紹了JAVA的 String.format()的使用,具有一定的參考價(jià)值,有需要的可以了解一下,希望能夠給你帶來(lái)幫助
    2021-11-11

最新評(píng)論

醴陵市| 固阳县| 同仁县| 太谷县| 通河县| 罗山县| 清水河县| 安多县| 日土县| 日土县| 名山县| 正镶白旗| 隆化县| 平乐县| 手游| 兴和县| 隆安县| 花莲县| 平武县| 太保市| 福清市| 本溪| 翁牛特旗| 遂川县| 华池县| 沛县| 霍州市| 平湖市| 岳西县| 沂水县| 漳州市| 萝北县| 图木舒克市| 夏邑县| 勃利县| 茶陵县| 朝阳区| 嘉义市| 鹰潭市| 南平市| 鹤庆县|