元注解


要声明一个注解, 我们需要元注解, 元注解是指注解的注解,包括@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.声明注解类型

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

2.使用自定义注解

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

3.测试自定义注解

  1. public class AnnotationTest {
  2. public static void main(String[] args) throws InvocationTargetException, IllegalAccessException {
  3. AnnotationRunner runner = new AnnotationRunner();
  4. Method[] methods = runner.getClass().getMethods();
  5. for (Method method : methods){
  6. CanRun annos = method.getAnnotation(CanRun.class);
  7. //System.out.println("1");
  8. if (annos != null){
  9. method.invoke(runner);
  10. System.out.println(annos.str());
  11. }
  12. }
  13. }
  14. }

运行结果:

  1. method 2
  2. foobar

Java中的自定义注解的更多相关文章

  1. java中的自定义注解的使用

    https://www.cnblogs.com/acm-bingzi/p/javaAnnotation.html

  2. [转]Java中实现自定义的注解处理器

    Java中实现自定义的注解处理器(Annotation Processor) 置顶2016年07月25日 19:42:49 阅读数:9877 在之前的<简单实现ButterKnife的注解功能& ...

  3. Java中常见的注解

    Java中常见的注解 1.JDK自带的注解@Override  @Deprecated  @Suppvisewarnings 常见第三方注解 Spring:@Autowired  @Service  ...

  4. Java中的元注解

    注解为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便地使用这些数据. 通过使用注解,我们可以将这些元数据保存在Java源代码中,并利用annotation API为自己的 ...

  5. 如何优雅地在 Spring Boot 中使用自定义注解,AOP 切面统一打印出入参日志 | 修订版

    欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 资深架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...

  6. 在springMVC中使用自定义注解来进行登录拦截控制

    1:java注解使用是相当频繁,特别是在搭建一些框架时,用到类的反射获取方法和属性,用的尤其多. java中元注解有四个: @Retention     @Target     @Document  ...

  7. Java反射与自定义注解

    反射,在Java常用框架中屡见不鲜.它存在于java.lang.reflact包中,就我的认识,它可以拿到类的字段和方法,及构造方法,还可以生成对象实例等.对深入的机制我暂时还不了解,本篇文章着重在使 ...

  8. Java:深入自定义注解(Annotation)

    在网上找了很多资料也有写的比较好的,但是总有有一点半点的细节没有写出来,在这里自己总结下使用. 使用Java的自定义注解,首先个人需要了解下Java为我们提供的元注解和相关定义注解的语法.(这个我在网 ...

  9. 一起来看一下Java中的Annotation注解

    目录: 一. 什么是Annotation 二. Annotation的作用 2.1 编译器使用到的注解 2.2 .class文件使用到的注解 2.3 运行期读取的注解 三. 定义Annotation ...

随机推荐

  1. 10 Minutes to pandas中文版

    本文是对pandas官方网站上<10 Minutes to pandas>的一个简单的翻译,原文在这里.这篇文章是对pandas的一个简单的介绍,详细的介绍请参考:Cookbook .习惯 ...

  2. sprintf用法

    函数简介 函数功能:把格式化的数据写入某个字符串 头文件:stdio.h 函数原型:int sprintf( char *buffer, const char *format [, argument] ...

  3. 多校1007 Naive Operations

    >>点击进入原题测试<< 思路:好像是第一次这么印象深刻的写线段树,说实话,这个题确实很有意思,值得学习. 看了大神讲解视频,但是自己写的还是超时了. 参考来自 https:/ ...

  4. BZOJ 2095 [POI2010]Bridges (最大流、欧拉回路)

    洛谷上有这题,但是输出方案缺SPJ..(而且我也懒得输出方案了) 题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2095 题解: 首先判 ...

  5. JRebel 7.1.5 插件下载 安装 激活 结合 IntelliJ IDEA--自动编译进行热部署---

    Intellij IDEA 安装和配置jrebel进行项目的热部署 https://www.cnblogs.com/a8457013/p/7866625.html Intellij IDEA 使用jr ...

  6. Linux下汇编语言学习笔记71 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  7. Redis3.0集群方案分析

    在Redis3.0集群出来之前,大家都对作者antirez寄予厚望,因为Redis从来没有让我们失望过.现在Redis3.0集群出来了,网上出了很多评论文章,都说他的功能多么强大,包括下面这张图是彻底 ...

  8. Maticsoft Code Generator

    源码:https://github.com/easonjim/MaticsoftCodeGenerator bug提交:https://github.com/easonjim/MaticsoftCod ...

  9. Ubuntu下用hadoop2.4搭建集群(伪分布式)

    要真正的学习hadoop,就必需要使用集群,可是对于普通开发人员来说,没有大规模的集群用来測试,所以仅仅能使用伪分布式了.以下介绍怎样搭建一个伪分布式集群. 为了节省时间和篇幅,前面一些步骤不再叙述. ...

  10. Intellij热部署插件JRebel使用方法(转载)

    Intellij热部署插件JRebel帮助开发者在项目处于运行状态下任意修改Java文件并动态反馈到运行的项目中.插件官方下载地址:https://plugins.jetbrains.com/plug ...