Java使用自定义注解

目录

前言

一、Java中的元注解

二、创建JAVA自定义注解

1.声明一个注解

2.使用该注解

总结


前言

    注解是JAVA提供的设置程序中元素的关联信息和元数据的方法,它是一个接口,声明的关键字是 “@interface”,也可以说是一个特殊的Java类型。

    在程序中,可以通过反射来获取指定程序中的注解对象,然后通过该注解对象来获取注解中的元数据信息。


一、Java中的元注解

JAVA从JDK5.0开始加入了注解,提供了几种元注解,即用来描述注解信息的注解。分别如下:

@Target

@Target用来描述注解修饰的范围,注解可被用于包、类型(class/interface/enum/注解等)、成员变量、方法等

@target注解的取值分析
序号名称修饰目标
1TYPE用于描述类、接口、或枚举等
2FIELD用于描述域(成员变量)
3METHOD用于描述方法
4PARAMETER用于描述参数
5CONSTRUCTOR用于描述构造器
6LOCAL_VARIABLE用于描述局部变量
7ANNOTATION_TYPE用于描述注解
8PACKAGE用于描述包
9TYPE_PARAMETER用于普通变量的声明
10

TYPE_USE

能标注任何类型的名称

 

@Retention 

@Retention 用来定义该注解的保留级别,即在什么时候有效,有下面三种类型

名称
SOURCE在源文件种有效
CLASS在class文件中有效
RUNTIME在运行时有效

PS:一般 RUNTIME的使用场景最多。

 @Documented

@Documented声明这个注解被Javadoc工具记录,可以被文档化

@Inherited

 @Inherited是一个标记注解,表明这个注解可以被继承,例如如果一个标注了@Inherited的注解被使用于一个类,那么他的子类也继承了这个注解。

二、创建JAVA自定义注解

Java除了可以使用默认的注解以外,还可以自定义注解来使用。

1.声明一个注解

代码如下:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 自定义注解.
 *
 * @author linzp
 * @version 1.0.0
 * CreateDate 2020/9/30 15:52
 */
@Target(ElementType.FIELD) //这里表明注解用于字段上
@Retention(RetentionPolicy.RUNTIME) //保留到运行时,可以通过注解获取
public @interface MyAnnotation {

    //字段描述
    String description();

    //字段长度
    int length();
}

 这个注解用于描述字段的信息,有两个方法,一个用来描述字段的信息,一个用来描述字段的长度。

2.使用该注解

编写一个类来使用该注解,代码如下  :

import java.lang.reflect.Field;

/**
 * 测试使用自定义注解.
 *
 * @author linzp
 * @version 1.0.0
 * CreateDate 2020/9/30 15:55
 */
public class AnnotationDemo {

    /**
     * 描述字段信息.
     */
    @MyAnnotation( description = "用户名称", length = 6)
    private static String name;

    private String email;

    public static void main(String[] args) {

        //反射获取类模板
        Class c = AnnotationDemo.class;

        //获取所有字段
        Field[] declaredFields = c.getDeclaredFields();

        //遍历所有字段
        for(Field f : declaredFields){
            //判断这个字段是否有自定义的注解
            if (f.isAnnotationPresent(MyAnnotation.class)){
                //获取注解信息
                MyAnnotation annotation = f.getAnnotation(MyAnnotation.class);
                //打印
                System.out.println("字段名:"+f.getName()
                        + " 字段描述:"+annotation.description()
                        + " 字段长度:"+annotation.length());
            }
        }
    }
}

输出结果如下:

字段名:name 字段描述:用户名称 字段长度:6

这里使用了反射来获取类对象信息,并且获取该类的所有字段,判断字段上是否有使用自定义的注解,如果有的话,获取该注解的值并打印出来。


总结

本文主要介绍了Java的元注解和如何来自定义一个注解并解析。下次介绍自定义注解的使用场景,和使用反射解析注解的相关方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林志鹏JAVA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值