Java注解

元注解

  • 元注解顾名思义我们可以理解为注解的注解,它是作用在注解中,方便我们使用注解实现想要的功能。元注解分别有@Retention、 @Target、 @Document、 @Inherited和@Repeatable(JDK1.8加入)五种。
@Target

表示该注解可以用在什么地方

  • ANNOTATION_TYPE 可以应用于注释类型
  • CONSTRUCTOR 可以应用于构造函数
  • FIELD 可以应用于字段或属性
  • LOCAL_VARIABLE 可以应用于局部变量
  • METHOD 可以应用于方法级注释
  • PACKAGE 可以应用于包声明
  • PARAMETER 可以应用于方法的参数
  • TYPE 可以应用于类的任何元素
@Retention

表示注解存在阶段是保留在源码(编译期),字节码(类加载)或者运行期(JVM中运行)

  • SOURCE,注解仅存在于源码中,在class字节码文件中不包含
  • CLASS, 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得
  • RUNTIME, 注解会在class字节码文件中存在,在运行时可以通过 ***反射 *** 获取到
不同引用有什么不同?(应用场景)
级别技术说明
源码APT
ide代码检查
在编译期能够获取注解与注解声明的类包扩类中所有成员信息,一般用于生成额外的辅助类。
字节码字节码增强在编译出Class后,通过修改Class数据实现修改代码逻辑的目的。例如是否需要修改和修改为不同逻辑的判断
运行时反射在运行期间,通过反射技术动态获取注解与其元素,从而完成不同的逻辑判定。

APT如何运行的?

运行在编译阶段
.java -> javac -> .class
javac解析java类->采集所有的注解信息->包装成Element->javac调起注解处理程序,不需要手动调用

APT如何实现

1,在android工程中,创建一个java的Module,写一个类继承AbstractProcessor

2,在继承AbstractProcessor类中的process方法,处理我们自定义的注解

3,在项目Gradle中添加auto-service和aptmodule的引用

4,生成的源代码在build/generated/source/apt下可以看到

字节码增强

在字节码中写代码
.class -> 格式(数据按照特定的方式记录与排列)
.class 通过IO -> byte[],修改

@Documented

表示将此注解包含在Javadoc中

@Inherited

表示允许子类继承父类中的注解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Qi T

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值