Java实现自定义注解

这篇具有很好参考价值的文章主要介绍了Java实现自定义注解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

(1)Java实现自定义注解其实很简单,跟类定义差不多,只是属性的定义可能跟我们平时定义的属性略有不同,这里会给大家详解,先来看代码:

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomAnnotation {
    String message() default "";
    int[] nums();
}

上面代码就实现了一个自定义注解实现自定义注解需要最少指定两个基本条件①注解的作用范围②注解的生命周期,那这两个范围怎么指定呢?这个问题问的很好,指定这两个条件,就需要使用到了Java为我们提供的元注解(所谓的元注解:其实就是Java官网自己定义的注解,作用在注解上,并且为这个注解赋予了含义,当编译器扫描到这个注解时,就知道该注解是什么作用!)


(2)看到这里要注意的是,上面 message() 和 nums()  可能跟我们定义方法有点类似,但是,它不是方法!它不是方法!它不是方法!重要的事情讲三遍,它是java注解自定义属性的规则(可能很多人疑惑也就是在这个点上!)

    String message() default "";

上面表示的是定义一个 String 类型的 message属性,默认值为 ""

注解自定义属性的格式为: 属性类型 属性名称();

其中默认值可以写可以不写,如果需要给这个属性默认值,那么就使用 default 值 来为这个属性赋予默认值。这样就已经完成了自定义注解。


(3)刚才我们说过,需要自定义注解,最少指定两个基本条件:①注解的作用范围②注解的生命周期,那么就需要用到元注解,Java为我们提供了四个元注解,作用如下:

注解 作用
@Target 指定注解作用范围(比如说:该注解是作用在类上,还是方法,或者是属性上等等)
@Retention 指定注解的生命周期(也就是注解的保留时间,是在编译器有效,还是运行时有效等等)
@Documented 是一个标记注解,里面没有任何属性,用 @Documented 注解修饰的注解类会被 JavaDoc 工具提取成文档。(不常用,可选项)
@Inherited 也是一个标记注解,,没有定义属性,作用是为了表示该注解可以被继承(比如说:你自定义了一个A注解,并且使用了@Inherited修饰,然后在paren类使用了A注解,那么paren的所有子类都默认继承了注解A)。【不常用】


4)带大家看一下源码,看一下这几个元注解分别定义了哪些属性,并且有什么值:

 ①Target注解

Java实现自定义注解

可以看到,Target注解只是定义了一个Value属性,属性类型为 ElementType,来看一下ElementType有哪些值

public enum ElementType {
    /** Class, interface (including annotation type), or enum declaration */
    TYPE,    //作用于类、接口、枚举

    /** Field declaration (includes enum constants) */
    FIELD,    //作用在字段上

    /** Method declaration */
    METHOD,    //作用在方法

    /** Formal parameter declaration */
    PARAMETER,  //形参

    /** Constructor declaration */
    CONSTRUCTOR,  //构造器

    /** Local variable declaration */
    LOCAL_VARIABLE,  //局部变量

    /** Annotation type declaration */
    ANNOTATION_TYPE, //注解类型声明

    /** Package declaration */
    PACKAGE, //包声明

    /**
     * Type parameter declaration
     *
     * @since 1.8
     */
    TYPE_PARAMETER,  //类型参数化的声明

    /**
     * Use of a type
     *
     * @since 1.8
     */
    TYPE_USE,  //把该注解当做一个类型来使用

    /**
     * Module declaration.
     *
     * @since 9
     */
    MODULE
}

 @Retention

Java实现自定义注解

 Retention也是只定义了一个value属性,该属性类型为: RetentionPolicy,我们再一起看看Retention有哪些值可以选择:

public enum RetentionPolicy {
    /**
     * Annotations are to be discarded by the compiler.
     */
    SOURCE,  //表示该注解的生命周期只在编译阶段

    /**
     * Annotations are to be recorded in the class file by the compiler
     * but need not be retained by the VM at run time.  This is the default
     * behavior.
     */
    CLASS, //该注解被保留在class文件上
 
    /**
     * Annotations are to be recorded in the class file by the compiler and
     * retained by the VM at run time, so they may be read reflectively.
     *
     * @see java.lang.reflect.AnnotatedElement
     */
    RUNTIME //该注解生命周期在运行时
}

@Documented

Java实现自定义注解

可以看到,Documented注解只是一个标记注解,里面什么属性都没有声明,作用是:使用了该注解的类,会被 doc工具提取成参考文档

@Inherited

Java实现自定义注解

 这个注解也是一个标记注解,表示该注解是可以被继承的

总结

以上就是Java注解自定义的全部过程了,注解出现为开发人员提供了很大的便利,从以前spring工程需要繁琐复杂的xml各种配置,到现在只需要在类上添加注解,其中的对比一用可知,这里的注解也可以充当理解为就是一个标识符,比如说在类上使用 @Component,那么springBoot容器启动的时候就可以知道该类需要加载到容器中。文章来源地址https://www.toymoban.com/news/detail-418543.html

到了这里,关于Java实现自定义注解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java基础】注解——自定义注解

    Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。 比如我们常见的@Override和@Deprecated都是注解,注解可以加在类、方法、成员变量等上面,类似于给他们“ 打标签 \\\"。 public @interface 注解名{} 看起来和定义接口很相似只是多了一个@符号 接口: public interface 接口名

    2024年02月03日
    浏览(45)
  • Java中的注解,自定义注解

    框架 = 注解 + 反射 + 设计模式 注解( Annotation )是从JDK5.0开始引入,以“@注解名”在代码中存在。 Annotation 可以像修饰符一样被使用,可用于修饰包、类、构造器、方法、成员变量、参数、局部变量的声明。还可以添加一些参数值,这些信息被保存在 Annotation 的 “name=valu

    2023年04月16日
    浏览(104)
  • java 元注解||自定义注解的使用

    1. @Retention注解 指定了标记的注解如何存储: RetentionPolicy.SOURCE,标记的注解仅保留在源代码级别,并被编译器忽略。 RetentionPolicy.CLASS,标记的注解在编译时由编译器保留,但被Java虚拟机(JVM)忽略。 RetentionPolicy.RUNTIME,标记的注解由JVM保留,以便运行时环境可以使用。 2. @Do

    2024年02月16日
    浏览(37)
  • Java中自定义注解

    当使用Java编写应用程序时,我们常常使用注解来为程序添加附加信息,并且可以在运行时读取这些注解。除了Java提供的预定义注解外,我们还可以自定义注解来满足自己的需求。在本文中,我们将介绍Java中自定义注解的基础知识。 一、什么是注解? 注解是一种元数据,可

    2024年02月14日
    浏览(36)
  • Java自定义注解

    目录 一、什么是自定义注解 1)Java注解简介 2)Java注解分类 JDK基本注解 JDK元注解 自定义注解 如何自定义注解? 二、自定义注解 1)获取类上注解值 2)获取类属性上的注解属性值 3)获取方法上的注解值  4)获取参数修饰注解对应的属性值 三、aop应用自定义注解 自定义注

    2024年02月19日
    浏览(36)
  • Java的自定义注解

            自定义注解包括注解声明、元注解、运行时处理器三个部分。注解声明指定了注解的名称、作用域、成员等信息;元注解则用来对注解进行修饰;运行时处理器则负责在程序运行过程中处理注解,并根据注解提供的信息执行相应的逻辑。自定义注解在编写框架、插

    2024年02月03日
    浏览(37)
  • 一文详解Java自定义注解

    目录 简介 JDK注解 @Target @Retention @Documented @Inherited 第三方注解 自定义注解 举例 默认字符串注解 实现指定包名称扫描注解 注解( Annotation )是Java SE 5.0 版本开始引入的概念,它是对 Java 源代码的说明,是一种元数据(描述数据的数据)。 Java中的注解主要分为以下三类: JDK的

    2024年02月06日
    浏览(91)
  • 自定义注解与拦截器实现不规范sql拦截(自定义注解填充插件篇)

    在自定义注解与拦截器实现不规范sql拦截(拦截器实现篇)中提到过,写了一个idea插件来辅助对Mapper接口中的方法添加自定义注解,这边记录一下插件的实现。 在上一篇中,定义了一个自定义注解对需要经过where判断的Mapper sql方法进行修饰。那么,现在想使用一个idea插件来

    2024年01月23日
    浏览(51)
  • SpringBoot自定义Jackson注解,实现自定义序列化BigDecimal(增强JsonFormat注解)

    在处理BigDecimal字段的时候,希望自定义序列化格式。虽然有 JsonFormat可以自定义格式,但是还是不够,JsonFormat不能对 BigDecimal 进行个性化处理,比如指定的RoundingMode。 现在就是需要有个注解,可以实现自定序列化BigDecimal类型 首先,自定义一个注解 BigDecimalFormatter 实现一个

    2024年02月09日
    浏览(41)
  • 根据aop实现自定义缓存注解

    自定义注解 切面 使用

    2024年02月13日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包