## 元注解

要声明一个注解, 我们需要元注解, 元注解是指注解的注解,包括@Retention, @Target, @Document, @Inherited.

@Retention

注解的保留位置(枚举RetentionPolicy),RetentionPolicy可选值:

  • SOURCE 注解仅存在于源码中,在class字节码文件中不包含, 如果只是做一些检查性的操作,比如 @Override 和 @SuppressWarnings,则可选用 SOURCE 注解。
  • CLASS 默认的保留策略,注解在class字节码文件中存在,但运行时无法获得, 如果要在编译时进行一些预处理操作,比如生成一些辅助代码(如 ButterKnife),就用 CLASS注解
  • RUNTIME 注解在class字节码文件中存在,在运行时可以通过反射获取到, 如果需要在运行时去动态获取注解信息,那只能用 RUNTIME 注解

@Inherited

说明子类可以继承父类中的该注解

@Documented

声明注解能够被javadoc等识别

@Target

用来声明注解范围(枚举ElementType),ElementType可选值:

  • TYPE 接口、类、枚举、注解
  • FIELD 字段、枚举的常量
  • METHOD 方法
  • PARAMETER 方法参数
  • CONSTRUCTOR 构造函数
  • LOCAL_VARIABLE 局部变量
  • ANNOTATION_TYPE 注解
  • PACKAGE

## Demo

1.声明注解类型

@Target(value = ElementType.METHOD) //声明该注解的运行目标: 方法
@Retention(value = RetentionPolicy.RUNTIME) //该注解的生命周期: 运行时
public @interface CanRun { // 通过@interface表示注解类型String str() default "wow"; // 注解中携带的元数据
}

2.使用自定义注解

public class AnnotationRunner {public void method1() {System.out.println("method 1");}@CanRun(str = "foobar") // 方法2添加了自定义注解的标签同时传入str值public void method2() {System.out.println("method 2");}public void method3() {System.out.println("method 3");}}

3.测试自定义注解

public class AnnotationTest {public static void main(String[] args) throws InvocationTargetException, IllegalAccessException {AnnotationRunner runner = new AnnotationRunner();Method[] methods = runner.getClass().getMethods();for (Method method : methods){CanRun annos = method.getAnnotation(CanRun.class);//System.out.println("1");if (annos != null){method.invoke(runner);System.out.println(annos.str());}}}
}

运行结果:

method 2
foobar

转载于:https://www.cnblogs.com/fortitude/p/10932623.html

Java中的自定义注解相关推荐

  1. java 中的 Annotation 注解学习笔记

    java 中的 Annotation 注解 什么是注解 元注解 @Target @Retention @Document @Inherited 自定义注解 什么是注解 Annotation 是从JDK ...

  2. Java中的@Test注解

    Java中的@Test注解 @Test注解,方便我们对一段代码进行测试. 需要导入相应的包: import org.junit.Test; 在方法前加上 @Test , 则该方法即为测试方法,可以执行 ...

  3. java scheduled_怎么在java中利用@Scheduled注解执行定时任务

    怎么在java中利用@Scheduled注解执行定时任务 发布时间:2021-01-13 16:52:56 来源:亿速云 阅读:84 作者:Leah 本篇文章给大家分享的是有关怎么在java中利用@S ...

  4. java 继承 注解_在java中实现组合注解原理分析(注解继承)

    今天在自定义注解的时候,原计划实现一个类似于Spring中的注解@Component的功能,如果稍有留意一下,会发现,在Spring中我们常见的注解,其实都继承了@Component注解:如下图所示: ...

  5. java中spring的注解_spring中的各种注解解析

    Spring中的注解大概可以分为两大类: 1)spring的bean容器相关的注解,或者说bean工厂相关的注解: 2)springmvc相关的注解. spring的bean容器相关的注解,先后有:@ ...

  6. 在SpringBoot项目中,自定义注解+拦截器优雅的实现敏感数据的加解密!

    在实际生产项目中,经常需要对如身份证信息.手机号.真实姓名等的敏感数据进行加密数据库存储,但在业务代码中对敏感信息进行手动加解密则十分不优雅,甚至会存在错加密.漏加密.业务人员需要知道实际的加密规则等 ...

  7. java 注解原理_在java中实现组合注解原理分析(注解继承)

    今天在自定义注解的时候,原计划实现一个类似于Spring中的注解@Component的功能,如果稍有留意一下,会发现,在Spring中我们常见的注解,其实都继承了@Component注解:如下图所示: ...

  8. Spring切面中实现自定义注解

    1.首先写出一个自定义注解. package com.salong.aspect.test;import java.lang.annotation.*;@Target(ElementType.METH ...

  9. java 切片_JAVA自定义注解并切片应用

    Java支持注解形式,合理使用注解,可以对我们的编程提供极大的便利.JAVA自身提供了三种注解,分别是:@Override,@Deprecated,@SuppreWarnings.大家平时应该看见这个 ...

  10. SpringBoot中利用自定义注解优雅地实现隐私数据脱敏(加密显示)

    前言 这两天在整改等保测出的问题,里面有一个"用户信息泄露"的风险项(就是后台系统里用户的一些隐私数据直接明文显示了),其实指的就是要做数据脱敏. 数据脱敏:把系统里的一些敏感数据 ...

最新文章

  1. 还在使用Future轮询获取结果吗?CompletionService快来了解下。
  2. Mac 上 iterm2 和 VSCode 终端中的字体设置建议
  3. php正则匹配js中变量_PHP正则表达式核心技术 第4节 php查找匹配函数使用心得
  4. 查找字符位置_学习VB编程第69天 字符串查找与替换
  5. 数据结构的简单理解(4)
  6. python定时器库_Python定时器完整示例 python定时器用法举例
  7. Linux内核线程kernel thread详解--Linux进程的管理与调度
  8. ubutun 更换网络源_Ubuntu 更换源
  9. 【Liunx服务器】阿里云服务器下部署多个tomcat服务
  10. WebService的两种用户验证方式
  11. MySQL(三) —— 约束以及修改数据表
  12. nodejs中全栈开发框架meteor的文档
  13. extend 和 append 的区别
  14. AC日记——单词倒排 1.7 28
  15. 社区智能健康手环方案/APP/小程序/项目
  16. 2020年测试面试经历以及面试题大全
  17. 大家怎么看阿里云的“云渲染”服务?
  18. 读书笔记--认知突围
  19. soul被下架,社交圈的一股清流也变了味?
  20. Excel中使用名称定义常数

热门文章

  1. CommandTarget属性
  2. firefox与IECss的区别
  3. 空巢青年,“空巢”是选择还是无奈? | 数据告诉你
  4. redis的运行机制
  5. JS URL传中文参数引发的乱码问题
  6. 回溯____蓝桥 棋盘
  7. GridView跨页面多选
  8. 俄文化部长称Netflix是美国文化侵掠的工具,将占领每台电视机
  9. TCP/UDP协议简要梳理
  10. mybaits 学习