首页 > 编程语言 >【Java】自定义注解的使用

【Java】自定义注解的使用

时间:2024-11-13 16:08:06浏览次数:1  
标签:Java Target 自定义 注解 ElementType class Retention

什么是注解

java中的,注解分为两种,元注解和自定义注解,类似于公理和定理的关系。我们常用一些注解:@Autowired@Override等都是自定义注解。

在JAVA中如何实现自定义注解?

@interface关键字

我们想定义一个自己的注解 需要使用 @interface来定义。

// 元注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    // 注解成员
    String value() default "Hello World";
    int number() default 42;
    boolean isTrue() default true;
}

注解的使用:

public class MyAnnotationTest {

    @MyAnnotation(value = "测试值")
    public void exampleMethod(){

    }

    /**
     *
     * @author lyj
     * @date 2024-11-13
     */
    @Test
    public void testAnnotation() {
        try {
            Method method = MyAnnotationTest.class.getMethod("exampleMethod");
            if(method.isAnnotationPresent(MyAnnotation.class)){
                MyAnnotation annotation = method.getAnnotation(MyAnnotation.class);
                System.out.println(annotation.value());
                System.out.println(annotation.number());
                System.out.println(annotation.isTrue());
            }
        } catch (NoSuchMethodException e) {
            throw new RuntimeException(e);
        }
    }
}

元注解

光加上@interface关键字还不够,我们需要了解5大元注解

元注解 说明 使用 枚举类
@Retention 指定注解的生命周期 @Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE) 注解只保留在源文件,当JAVA文件编译成class文件的时候,注解会被遗弃(.java文件)
@Retention(RetentionPolicy.CLASS)注解只保留在class文件,当jvm加载class文件时,被遗弃,这是默认的生命周期
@Retention(RetentionPolicy.RUNTIME)注解不仅被保存在class文件中,jvm加载class之后,仍然存在(内存的字节码中)
@Target 指定注解可以修饰的元素类型 @Target(ElementType.FIELD) @Target(ElementType.ANNOTATION_TYPE) 标记的注解可应用于注解类型
@Target(ElementType.CONSTRUCTOR) 标记的注解可应用于构造函数
@Target(ElementType.FIELD) 标记的注解可以用英语字段或属性
@Target(ElementType.LOCAL_VARIABLE) 标记的注解可以应用于局部变量
@Target(ElementType.METHOD)标记的注解看应用于方法
@Target(ElementType.PACKAGE)标记的主机可以应用于包声明
@Target(ElementType.PARAMETER) 标记的注解可以应用于方法的参数
@Target(ElementType.TYPE)标记的注解可以应用于任何元素
@Documented 指定的注解会被JavaDoc工具提取成文档。默认情况下,JavaDoc是不包括文档的。 @Documented
@Inherited 表示该注解会被子类继承。注意,仅针对类,成员属性、方法并不收此注释的影响。 @Inherited
@Repeatable 表示可以重复利用,为了解决同一个注解不能重复在同一类/方法/属性上引用 @Repeatable

最常用的元注解还是@Retention@Target

简单的自定义注解

开始的例子,已经实现了简单的自定义注解。可以通过获取到注解的方法,获取到当前注解的值。

创建注解时,应注意:

  1. 注解必须由public修饰,默认public;
  2. 一般注解元素以名词命名,若只有一个,建议名称为value;
  3. 注解元素类型只能是基本数据类型、基本数据类型数组或注解类型(注意嵌套);
  4. default指定注解元素默认值时,值类型必须与注解元素类型相同。

使用时应注意

  1. 若无注解元素,可省略() 小括号;
  2. 若注解类型为数组,且赋值时只有一个值时,可以省略{}花括号;
  3. 如果只有一个注解元素,且注解元素名为value
  4. ElementTypePACKAGE,则此注解用于标注在package-info.java文件中。(这个文件默认是不创建的。在idea中,双击shift可搜索到,打开是才会创建。)

标签:Java,Target,自定义,注解,ElementType,class,Retention
From: https://www.cnblogs.com/luyj00436/p/18544203

相关文章

  • Java学习之定时任务框架Quartz
    Quartz的核心类有以下三部分:Job:需要实现的任务类,实现execute()方法,执行后完成任务。Trigger:包括SimpleTrigger和CronTrigger。Scheduler:任务调度器,负责基于Trigger触发器,来执行Job任务。简单示例1.pom配置 2.创建JobpublicclassEplJobimplementsJob{......
  • Java基础(二)
    注释,标识符→关键字单行//,多行/**/,文档/***/数据类型(强类型语言:需要严格符合规定,变量先定义后使用。弱类型语言)Java两大数据类型(基本类型,引用类型)int简单记为正负21亿,浮点数在具体数值后加F进行判断string定义字符串,属于类进制识别:二进制0b,十进制,八进制0,十六进制0xflo......
  • Java方法-方法的定义和调用
    方法的定义和调用方法的定义Java的方法类似于其它语言的函数,是一段用来完成特定功能的代码片段,一般情况下,定义一个方法包含以下语法:方法包含一个方法头和一个方法体。下面是一个方法的所有组成部分:修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型......
  • [开题报告]基于javaweb的宠物医院平台dz56j9计算机毕业设计源码、研究背景、意义、目
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着人们生活水平的提高和城市化进程的加速,宠物已成为许多家庭的重要成员。宠物数量的增加带动了宠物相关产业的发展,其中宠物医院作为宠物健康保障的......
  • 散列表-HashMap的增删改查-Java
    在Java中,HashMap 是一种基于散列表的Map接口实现,可以使用null值和null键。以下是对 HashMap<Character,Integer> 进行的增删改查操作:1.增(put) map.put(key,value)、查(get) Integervalue=map.get(key)importjava.util.HashMap;publicclasstest{public......
  • springboot毕设基于JavaWeb的校园点餐平台源码+论文+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着校园数字化建设的不断推进以及学生生活节奏的加快,传统的校园餐饮模式面临着诸多挑战。目前,校园内餐饮需求多样且分散,学生在点餐过程中往往需......
  • 一个C#winform编写的2D数据曲线显示控件,三个Y轴,自定义曲线图表控件,电压电流实时数据曲
    一个C#winform编写的2D数据曲线显示控件,三个Y轴,自定义曲线图表控件,电压电流实时数据曲线,电压电流轨迹曲线实时刷新,点击显示此处数据(附下载链接)调用该控件案例截图如下所示:点我下载此资源》》》》》》》》......
  • 【Java Web】JSTL及其核心库介绍 JSTL函数
    文章目录JSTL介绍核心库表达式控制\<c:out>\<c:set>\<c:remove>\<c:catch>流程控制\<c:if>\<c:choose>循环标签\<c:forEach>URL标签\<c:import>\<c:url>\<c:param>\<c:redirect>格式化JSTL函数JSTL介绍JSTL(JavaSer......
  • 为什么连Java初中级面试都要问并发编程?
    前几天收到一位粉丝留言,说的是他才一年半经验,去面试却被各种问到分布式,高并发,多线程之间的问题。基础层面上的是可以答上来,但是面试官深问的话就不会了!被问得都怀疑现在Java招聘初级岗位到底招的是初级开发还是架构,是不是面进去就能直接进架构组了?(手动狗头) 但其实有一说......
  • 纯靠背八股文,能通过现在的Java面试吗?
    程序员面试背八股,可以说是现在互联网开发岗招聘不可逆的形式了,其中最卷的当属Java!(网上动不动就是成千上百道的面试题总结)你要是都能啃下来,平时技术不是太差的话,面试基本上问题就不会太大。这时候尴尬的现象就出现了:虽然八股文背的好并不能代表这个人有实际工作能力,但企业还是......