Java注解处理器

概述

注解处理器(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

添加依赖:

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

原文发布于微信公众号 - 编码前线(gh_acef1225aadd)

原文发表时间:2018-09-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏青玉伏案

JavaEE开发使用Maven管理的SpringMVC工程

前几篇博客已经陆陆续续的聊了一些Spring的东西,今天博客我们就来聊一下SpringMVC。SpringMVC目前在JavaEE开发中可谓占据一席之地,用起来...

249100
来自专栏乐百川的学习频道

Spring学习笔记 Spring Roo 简介

一直以来,Java/Spring开发被认为是笨重的代表,无法快速生成项目原型和骨架。所以,Spring推出了Spring Roo这个项目,帮助我们快速生成项目原...

33270
来自专栏王清培的专栏

spring rest 容易被忽视的后端服务 chunked 性能问题

spring boot 容易被忽视的后端服务 chunked 性能问题 标签(空格分隔): springboot springmvc chunked 背景 sp...

57280
来自专栏lgp20151222

spring boot注入error,Consider defining a bean of type 'xxx' in your configuration问题解决方案

经常出现这问题一定是非spring生态圈的@标签 没被spring引入,如mybatis等

1.2K10
来自专栏编程

SpringBoot模块组成

1.1、 spring-boot模块 该模块提供了一些特性用来支持springboot中其他模块,这些特性包含如下。 SpringApplication类提供了...

21460
来自专栏java学习

关于Spring面试题讲解1

Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标...

12640
来自专栏ASP.NETCore

TinyFox在VS2015上的调试器

开源了 https://github.com/maxzhang1985/TinyFoxDEBUG

14930
来自专栏aoho求索

Spring Cloud Gateway 入门

Spring Cloud Gateway介绍 前段时间刚刚发布了Spring Boot 2正式版,Spring Cloud Gateway基于Spring Bo...

1.3K80
来自专栏大魏分享(微信公众号:david-share)

重点来了:事务一致性的深入研究&EJB的全生命周期 | 从开发角度看应用架构5

15140
来自专栏LanceToBigData

细说log4j

可能做过java项目的基本上都是用过log4j,它是用来做java日志的。比如我们做一个项目分为很多的模块,那我们怎么想要知道它什么时候启动了,这时候我们可以使...

34550

扫码关注云+社区

领取腾讯云代金券