通过反射获得自定义注解的值

通过反射获得自定义注解的值

1、简介

​ 自动JDK5之后,注解逐渐进入了大众的视野,注解对程序的完成有很好的辅助作用,极大的简化了开发步骤与操作,那么如何定义一个注解,以及注解是如何生效的呢。

​ 注解和反射是不可分割的,没有反射机制,程序就无法获得注解的值,也就无法进行后续操作,试想一下,如果我们能获得注解的值,我们就可以在后台用普通代码实现值的注入等等,这也是注解实现的简单原理。

2.定义注解

​ 要想使用自定义注解,首先要定义注解,比如我们定义一个“Annotation”,这个注解是为了一个Person类的name属性赋值。

​ 定义如下:

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface  Annotation{
    String value();
}

​ 如此,便定义了一个名为Annotation的注解,值得注意的是,注解的注解,也就是元注解,即上面的Target和Retention都是用来规定注解的功能的,比如@Target(ElementType.FIELD)表示这个定义的注解只在属性上有效,别的地方不能放这个注解,而@Retention(RetentionPolicy.RUNTIME)则表示运行时有效,也就是基本上任意时候都有效,除非程序执行完毕。另外常见的元注解还有@Documented和@Inherited,在此不做过多说明,感兴趣的可以自行搜索。

3.使用注解

​ 定义注解是为了使用注解,比如我们现在定义一个类。

@Data
@NoArgsConstructor
@AllArgsConstructor
class  Person{
    private String name;
}

​ 然后将注解加到定义的类中

@Data
@NoArgsConstructor
@AllArgsConstructor
class  Person{
    @Annotation(value = "张家瑞")
    private String name;
}

​ 这样,我们便对刚刚的注解进行了使用。

4.获取注解的值

​ 看到注解并不是我们的最终目的,我们还要让机器取到注解中的值,毕竟注解不单单是该我们自己看的,还是让机器读取的,这里我们可以通过反射来实现对注解值的获取。

public class TestT {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException {
        //获取类对象
        Class c1 = Class.forName("top.zhang.springboot02.annotation.Person");
        //获取属性对象
        Field name = c1.getDeclaredField("name");
        //获取注解对象
        Annotation annotation = name.getAnnotation(Annotation.class);
        //获取注解的值
        String value = annotation.value();
        //输出注解的值
        System.out.println(value);
    }
}

​ 如此,便获得了刚刚在注解中写的“张家瑞”的值,获取注解成功,既然成功获取到了注解的值,那么后续操作自然就水到渠成了。

5.总结

​ 注解的实现与反射是紧密相连的,为了读源码,必须对注解有一定了解,为了了解注解的执行过程,必须对反射有了解,因此注解和反射是学习java必须要掌握的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值