虽然自定义注解处理器是Java1.5发布的特性了,但是仍然十分强大,我们将学习什么是注解处理器以及如何使用注解处理器和代码生成库来一些好用的功能。
我相信每个使用过Java的人都知道,Java自身就有很多注解,比如@Override用来声明重写方法,@Singleton用来申明单例,Android SDK中也定义了一些注解,比如@NonNull, @StringRes, @IntRes等等。
如果使用过Dagger2, Lombok, DeepLinkDispatch 这些开源库的话,应该知道@Inject、@Component和@Module等注解,通过在一些类或者方法上加上这些注解就能实现一些非常神奇的功能。实际上之所以能实现这些功能,是因为这些第三方库定义了一些注解处理器,在编译时,这些注解处理器根据注解自动生成了一些实现功能的Java代码。
下面开始实现自定义注解处理器,主要功能是通过注解,实现路由跳转,示例项目分为以下三个部分:
在annotation模块中,新建文件src/main/java/com/example/annotation/Route.java,声明自定义注解
在annotation-processor模块中,修改build.gradle引入依赖
然后编写自定义注解处理器,创建文件src/main/java/com/example/annotation/processor/RouteProcessor.java
最终通过注解自动生成的代码如下:
这里仅仅是完成了最简单的路由跳转功能,没有考虑传参,以及调用结果之类的逻辑,完整的示例项目代码如下
一些优秀的路由框架:WMRouter、ARouter、DeepLinkDispatch
注释文件 | 大小 | 修改时间 |
---|---|---|
annotation | 2022年02月15日 | |
annotation-processor | 2022年02月15日 | |
app | 2022年02月15日 | |
build.gradle | 431 B | 2022年02月15日 |
gradle/wrapper | 2022年02月14日 | |
gradle.properties | 1 kB | 2022年02月15日 |
gradlew | 6 kB | 2022年02月14日 |
gradlew.bat | 3 kB | 2022年02月14日 |
local.properties | 437 B | 2022年02月14日 |
settings.gradle | 388 B | 2022年02月15日 |