Skip to content

Latest commit

 

History

History
54 lines (29 loc) · 1.61 KB

注解.md

File metadata and controls

54 lines (29 loc) · 1.61 KB

https://juejin.cn/post/6844903511809851400 1.注解的分类

Java的注解分为元注解和标准注解。

标准注解 SDO

元注解

@Documented

是一个标记注解,没有成员变量。 会被JavaDoc 工具提取成文档

@Target(METHOD,TYPE类,FIELD用于成员变量,PACKAGE用于包) 表示被描述的注解用于什么地方

@Retention

描述注解的生命周期

SOURCE:在源文件中有效(即源文件保留) CLASS:在 class 文件中有效(即 class 保留) RUNTIME:在运行时有效(即运行时保留)

这3个生命周期分别对应于:Java源文件(.java文件) ---> .class文件 ---> 内存中的字节码。

1、RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃; 2、RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期; 3、RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;

@Documented – 注解是否将包含在JavaDoc中 @Retention – 什么时候使用该注解 @Target – 注解用于什么地方 @Inherited – 是否允许子类继承该注解

注解的底层实现原理

注解的原理:

注解本质是一个继承了Annotation 的特殊接口,其具体实现类是Java 运行时生成的动态代理类。

而我们通过反射获取注解时,返回的是Java 运行时生成的动态代理对象$Proxy1。

通过代理对象调用自定义注解(接口)的方法,会最终调用AnnotationInvocationHandler 的invoke方法。