编译时注解代码的编写

本文介绍了如何使用APT(Annotation Processing Tool)技术在编译时生成代码,以实现类似ButterKnife的功能,如ID注入和点击事件注入。通过创建两个Java模块,一个用于处理代码生成逻辑,另一个包含注解。在注解类中定义所需注解,并在`Processor`类中实现处理逻辑。在`process`方法中,遍历被注解的字段,根据类信息生成代码。文章还提供了简化版的第三方库APT技术使用示例,并展示了生成的Activity代码。
摘要由CSDN通过智能技术生成

现在很多三方库使用了apt技术,使得我们能够在编译的时候就获得代码的信息,从而能够根据现有的代码生成一些新的代码,比如ButterKnife就会生成Activity,从而免去了去写重复的findViewById函数;Glide在编译的时候会获取GlideModule注解的类,从而在配置Glide的一些参数;还有我这里推荐一个省去写Parcelable序列化内部每个成员的write/read方法的库ParcelableGenerator,这个库也是使用另外apt技术,在编译的时候生成一个类,运行时用这个类来进行实际的序列化,归根到底最后还是要生成代码,下面来看如何生成代码。

demo地址:https://github.com/whoami-I/Learn_Annotation

一、环境的搭建
我在搭环境的时候总是遇到报错的问题,总是说gradle版本太高不支持本地的代码增量,我后来把gradle版本降低到4.4就好了,反正是用来学习的,因此gradle降低就降低吧。然后建两个java module,之所以是java module因为android module并不是包括全部java中的类,我们编写编译时注解代码的类在android module中是找不到的,建立两个module分别是ioc-compiler和ioc-annotation,compiler主要处理生成代码的逻辑,annotation里面包含需要使用到的注解,然后在测试模块,这里是主模块app中添加依赖:

implementation project(':ioc-annotation')
annotationProcessor project(':ioc-compiler')

然后开始写代码了,这里我们准备写一个类似于Butterknife的功能,提供id注入和点击事件注入,在ioc-annotation模块中分别建立两个注解

@Retention(RetentionPolicy.CLASS)
@Target(ElementType.FIELD)
public @interface BindView {
    int value();
}
@Retention(RetentionPolicy.CLASS)
@Target(ElementType.METHOD)
public @interface OnClick {
    int value();
}

这个就不多说了,需要注意的是两者注解的生命周

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值