您的位置:首页 > 编程语言 > Java开发

重新认识Java注解

2020-05-04 11:56 681 查看
# 重新认识Java注解 今天Debug看源码的时候,无意间看到这么个东西 ![图1](https://img2020.cnblogs.com/blog/1015123/202005/1015123-20200504115442337-349802128.png) 首先承认我的无知,看到这个我很惊诧。 也勾起了我的好奇心,于是有了这篇认知记录。 下面就来重新认识下注解吧! ## 注解的本质 关于运行时注解的信息,会在`.class`文件中,并且最终以运行时数据结构存储在`方法区`,也知道我们是可以通过`Class`对象或者`Method`对象,来获取其相应的注解信息的。 不过确实没有意识到,或者说根本就没有去猜想其背后的实现,也许是直接使用来解析注解的机会比较少吧。 现在才认识到,原来我们定义的注解, 最终使用的时候,都是以一个代理类的方式与相应的`Class`或者`Method`对象绑定到一起。 所有的注解,其实都是接口`Annotation`子接口,而每一个`@interface`的声明,最后其实就是一个普通的`interface`罢了!下面请看 ```java public @interface AnnotationDemo { int value(); int name (); } public interface com.example.demo.anno.AnnotationDemo extends java.lang.annotation.Annotation { public abstract int value(); public abstract int name(); } ``` 从上面对一个注解类的反编译结果就能看出来,它其实就是一个普通的`接口类` ## 从接口到实例 我们是如何查找到一个类定义的那些注解然后去使用呢? 答案是:从`Class`对象中,我们可以获取所有的信息 一个`Class` 的所有`Annotation`代理类被封装到一个私有静态类`AnnotationData`中 ```java private static class AnnotationData { // 一个Map 映射 具体的Annotation Class 和其代理类对象 final Map
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: