it编程 > 编程语言 > Java

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

8人参与 2026-01-31 Java

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

您想发表意见!!点此发布评论

推荐阅读

MyBatis中批量插入的三个关键优化技巧与避坑指南

01-31

Spring Boot全局异常处理机制中DispatcherServlet的处理流程和作用

01-31

SpringBoot设置欢迎页的三种方式详解

01-31

Java多重数组使用及说明

01-31

JAVA中Spring Boot的AOP切面编程是什么,如何使用?(实例代码)

01-31

Spring Boot异常处理try-catch应该怎么使用?

01-31

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论