前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java注解处理器

Java注解处理器

作者头像
用户1205080
发布2018-09-12 10:07:35
1.2K0
发布2018-09-12 10:07:35
举报
文章被收录于专栏:编码前线编码前线

概述

注解处理器(Annotation Processor),是javac的一个工具,用来在编译时扫描和处理注解。 一个注解处理器以Java代码(或者编译过得字节码)作为输入,生成.java文件作为输出。

接下来我们模仿ButterKnife 实现一个@BindView的注解来了解Java注解处理器的使用。

创建项目

模块说明:

bindview-annotation:定义注解,@BindView

bindview-compiler:定义注解处理器,处理被@BindView标记的代码,并在编译时生成xxxActivity_ViewBinding.java

bindview-api:工具类,调用xxxActivity_ViewBinding.java中的方法,实现View的绑定。

bindview-annotation(自定义注解)

创建注解类BindView

bindview-compiler(注解处理器)

在该module的build.gradle中添加如下代码:

创建BindViewProcessor

ClassCreatorProxy是创建Java代码的代理类:

bindview-api(注解生成代码的调用工具类)

创建注解工具类BindViewTool

使用注解

在app模块的build.gradle中添加如下代码:

在MainActivity中使用注解:

运行后生成的代码(路径 app/build/generated/source/apt):

MainActivity_ViewBinding代码:

通过javapoet生成代码

上面生成代码的部分,是通过字符串拼接,过程非常繁琐。接下来就介绍一种更优雅的方式,使用javapoet

添加依赖:

代码语言:javascript
复制
dependencies{
   implementation'com.squareup:javapoet:1.10.0'
}

ClassCreatorProxy中添加如下代码

BindViewProcessor中调用:

相比用StringBuilder拼Java代码,明显简介很多,且生成的代码是一样的。

参考文章

  1. https://www.jianshu.com/p/7af58e8e3e18
  2. https://www.jianshu.com/p/50d95fbf635c
  3. https://blog.csdn.net/u013045971/article/details/53509237
  4. https://www.jianshu.com/p/94979c056b20
  5. https://blog.csdn.net/wzgiceman/article/details/54580745
  6. https://github.com/square/javapoet
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编码前线 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 创建项目
  • bindview-annotation(自定义注解)
  • bindview-compiler(注解处理器)
  • bindview-api(注解生成代码的调用工具类)
  • 使用注解
  • 通过javapoet生成代码
  • 参考文章
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档