Android 编译时注解-初认识

本文介绍了Android编译时注解的背景和思想,并详细阐述了注解和注解处理器的工作原理。通过实例展示了如何生成注解处理器,以及如何在Android项目中使用JavaPoet库来动态生成代码。文章末尾提供了相关资源和建议,鼓励读者深入学习并应用到实践中。
摘要由CSDN通过智能技术生成

Android 编译时注解-初认识

背景

编译时注解越来越多的出现在各大开源框架使用中,比如

JakeWharton/butterknife view

greenrobot/EventBus 事件

square/dagger 依赖注入

类似这样的库在开发和工作中已经越来越多,它们旨在帮助我们在效率为前提的情况下帮助开发者快速开发,节约时间成本。而它们都使用了编译时注解的思想。

正因为如此火热,所以有必要好好学习其中的实现原理,方便解决因为编译时注解导致的问题,同时可将此技术运用到自己的开源库中

思想

编译时注解框架在编写时有相对固定的格式,分包为例

这里写图片描述

格式相对固定,但是也可以灵活变动,比如讲apiannotations结合在一个moudel

moudel中的依赖关系也非常的固定

processors依赖包有api- annotations

app依赖包有 api -annotations-processors

其中除了appAndroid moudel以外,其他全部均是Java moudel

annotations注解

在讲解annotations注解之前,需要对java和android注解有大致的了解,可以参考我之前的博客

Java-注解详解

Android-注解详解

先初始一个HelloWordAtion注解标注Target为ElementType.TYPE修饰类对象

@Retention(RetentionPolicy.CLASS)
@Target(ElementType.TYPE)
public @interface HelloWordAtion {
   
    String value();
}

一般一个注解需要对应一个注解处理器,注解处理器在processors处理

processors 注解处理器

对应注解的处理器需要继承AbstractProcessor类,需要复写以下4个方法:

init

init(ProcessingEnvironment processingEnv)会被注解处理工具调用

param mean
ProcessingEnvironment 提供很多有用的工具类Elements, Types 和 Filer

process

process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv)这相当于每个处理器的主函数main(),你在这里写你的扫描、评估和处理注解的代码,以及生成Java文件。

param mean
annotations 请求处理的注解类型
roundEnv 有关当前和以前的信息环境
@return 如果返回 true,则这些注解已声明并且不要求后续 Processor 处理它们
@return 如果返回 false,则这些注解未声明并且可能要求后续 Processor 处理它们
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值