重新认识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
相关文章推荐
- Java 8系列之重新认识HashMap
- Java 8系列之重新认识HashMap
- 【系列】重新认识Java——泛型(通配、特性和注意点)
- 重新认识java-Vector
- 对Java注解(Annotation)初步的认识
- Java 8系列之重新认识HashMap (讲的最好)
- Java 8系列之重新认识HashMap
- 从头认识Spring-2.4 基于java的标准注解装配-@Inject-限定器@Named
- 【转】Java8系列之重新认识HashMap
- 重新认识Java线程的概念
- 重新认识Java包的命名规则
- Java8系列之重新认识HashMap
- Java 8系列之重新认识HashMap
- 【系列】重新认识Java——字符串(String)
- Java 8系列之重新认识HashMap
- 从头认识Spring-2.8 基于java注解的配置(基本没有xml)
- 重新认识Java包的命名规则
- Java8 重新认识HashMap
- Java 8系列之重新认识HashMap
- 对Java注解(Annotation)初步的认识