java的多重注解(重复注解)详解

 更新时间:2026年01月31日 09:15:44   作者:wal1314520  
文章主要讲述了Java中多重注解的使用,包括Java7和Java8两种方式,在Java7中,通过自定义注解容器来实现多重注解;而在Java8中,可以使用@Repeatable注解来实现多重注解,使代码更加简洁

java的多重注解

本来早就写这一篇的,后来一直有别的事拖住了,然后就把它给忘了。前段时间看代码时,无意中看到了当时写的多重注解,觉得还是有必要写点东西的,虽然不是很难,但是对没有接触过的来说,有一份关于它的文章总比没有强。

以前也没用到过多重注解

一次一个需求来了之后,发觉和之前的一个功能有点冲突,重新写一个方法又觉得多余,就考虑到这个多重注解上来了。但是java 7没有多重注解相关的,只有自定义注解,后来查了资料发觉java 8 增加的新特性有多重注解,但是我们的项目是jdk7的,肯定没办法换成8的,只好自己研究了,然后花了点时间,查了点资料最后把这个问题解决了。 下面我就针对java 7和java 8两种不同的方式讲一下这个多重注解。

在我的项目里的自定义注解是权限注解,用的是java 7的方法。

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

我需要一个多重注解

于是就想到了用容器来盛放,那不就是多重注解了嘛,所以就用了个数组存放。

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

在实际的使用过程中也很简单

就是把原来的注解变成注解容器就好了,原来的注解是

@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(); }

在拦截器上就把之前的权限注解的验证,变成权限注解容器的验证,之前是通过反射获取的注解,现在是通过反射获取注解容器也就是注解数组,然后再遍历验证就可以了。

在java 8里面,多重注解是一个新特性

也使多重注解简单很多。java 8允许我们把同一个类型的注解使用多次,只需要给该注解标注一下@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)即可。

在使用时,也只需要重复使用就可以了,即:

@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();}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • JAVA集合框架工具类自定义Collections集合方法

    JAVA集合框架工具类自定义Collections集合方法

    今天小编就为大家分享一篇关于JAVA集合框架工具类自定义Collections集合方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • 如何在Java中获取当前年份(实例代码)

    如何在Java中获取当前年份(实例代码)

    在Java语言中获取当前年份有几种方法:使用java.util包下的Calendar类,使用java.time包下的LocalDate类或者使用java.text包下的SimpleDateFormat类,本文通过实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2023-11-11
  • 更改Maven软件源为阿里云源的方法详解

    更改Maven软件源为阿里云源的方法详解

    这篇文章主要介绍了更改Maven软件源为阿里云源的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • SpringBoot中的Bean注入问题

    SpringBoot中的Bean注入问题

    SpringBoot开发中,Bean注入是关键,涉及构造函数注入、Setter注入和字段注入等方法,常见问题包括Bean未找到、循环依赖、多个实现注入等,推荐使用构造函数注入以增强代码测试性和维护性,并关注Bean的生命周期和作用域
    2024-09-09
  • java获取文件扩展名的方法小结【正则与字符串截取】

    java获取文件扩展名的方法小结【正则与字符串截取】

    这篇文章主要介绍了java获取文件扩展名的方法,结合实例形式分析了使用正则与字符串截取两种获取扩展名的操作技巧,需要的朋友可以参考下
    2017-01-01
  • Spring中IOC和AOP的深入讲解

    Spring中IOC和AOP的深入讲解

    这篇文章主要给大家介绍了关于Spring中IOC和AOP的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • SpringMVC 跨重定向请求传递数据的方法实现

    SpringMVC 跨重定向请求传递数据的方法实现

    这篇文章主要介绍了SpringMVC 跨重定向请求传递数据的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • Java定时任务schedule和scheduleAtFixedRate的异同

    Java定时任务schedule和scheduleAtFixedRate的异同

    本文主要介绍了Java定时任务schedule和scheduleAtFixedRate的异同,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • 聊聊Object类中的wait()和notify()方法

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

    这篇文章主要介绍了Object类中的wait()和notify()方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Java String.format()的用法

    Java String.format()的用法

    本篇文章主要介绍了JAVA的 String.format()的使用,具有一定的参考价值,有需要的可以了解一下,希望能够给你带来帮助
    2021-11-11

最新评论