java自定义注解的简单应用

Annotation(注解)是 Java 提供的一种对元程序中元素关联信息和元数据(metadata)的途径和方法。Annatation(注解)是一个接口,程序可以通过反射来获取指定程序中元素的 Annotation对象,然后通过该 Annotation 对象来获取注解中的元数据信息。

自定义注解

import java.lang.annotation.*;
/**
 * @author ringleader
 * @Description 自定义注解
 * @date 2020/6/10
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD,ElementType.METHOD,ElementType.TYPE})
@Documented
public @interface TestAnnotation {
    String description() default "";
    String name();

    /**
     *      1.注解声明
     * 由@interface声明ClassAnnotation为注解类型,注意比interface多了个@符号。
     *      2.注解的属性
     * 上面定义了两个属性:String类型的description属性,默认值为空字符串;String类型的name属性.注意虽然后面带了括号,但并不是方法。如果注解内部只定义了一个属性,该属性名通常为value,且在使用的时候可以省略value=,直接写值。
     * 注解的属性类型支持的类型有:所有基本类型,String,Class,enum,Anotation以及上述类型的数组类型。
     * */
}

带注解的实体类

/**
 * @author ringleader
 * @Description 带注解的实体类
 * @date 2020/6/10
 */
@TestAnnotation(name = "类注解name",description = "类注解说明")
public class Test {
    @TestAnnotation(name = "属性注解name1",description = "属性注解说明1")
    int size;
    @TestAnnotation(name = "属性注解name2",description = "属性注解说明2")
    int id;
    @TestAnnotation(name = "方法注解name1",description = "方法注解说明1")
    int getSize(){
        return this.size;
    }
    @TestAnnotation(name = "方法注解name2",description = "方法注解说明2")
    void setSize(int x){
        this.size=x;
    }

}

运行时注解解析器

import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * @author ringleader
 * @Description 运行时注解解析器
 * @date 2020/6/10
 */
public class TestAnnotationParse {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException {
        Class clazz = Class.forName("知识点验证.注解.功能测试1.Test");

        //获取类注解信息
        TestAnnotation classAnnotation = (TestAnnotation) clazz.getAnnotation(TestAnnotation.class);
        System.out.println(classAnnotation.description()+ " "+classAnnotation.name()+"\n");

        //获取所有方法注解信息 ,ps:这里需要使用 isAnnotationPresent 判断方法上是否使用了注解
        Method[] declaredMethods = clazz.getDeclaredMethods();
        for (Method method:declaredMethods){
            /*System.out.println("TestAnnotation.class:"+TestAnnotation.class);//知识点验证.注解.测试1.TestAnnotation
            System.out.println("testAnnotation.getClass():"+TestAnnotation.class);//class com.sun.proxy.$Proxy1*/
            if (method.isAnnotationPresent(TestAnnotation.class)){
                TestAnnotation methodAnnotation = method.getAnnotation(TestAnnotation.class);
                System.out.println(method.getName()+"方法的注解信息为:");
                System.out.println(methodAnnotation.name());
                System.out.println(methodAnnotation.description()+"\n");
            }

        }
        //获取属性注解信息
        Field[] declaredFields = clazz.getDeclaredFields();
        for (Field field:declaredFields){
            if (field.isAnnotationPresent(TestAnnotation.class)){
                TestAnnotation fieldAnnotation = field.getAnnotation(TestAnnotation.class);
                System.out.println(field.getName()+"字段的注解信息为:");
                System.out.println(fieldAnnotation.description());
                System.out.println(fieldAnnotation.name()+"\n");
            }
        }
        //获取指定属性注解信息
        Field id = clazz.getDeclaredField("id");
        System.out.println(id.getName()+"指定字段的注解信息为:");
        System.out.println(id.getAnnotation(TestAnnotation.class).description());
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值