自定义注解生成代码(三) 之javapoet案例实战

本文通过实战案例深入讲解如何使用JavaPoet生成代码,包括HelloWorld、网络请求接口、回调实体类及网络请求类的生成,展示了JavaPoet在自动化代码生成中的应用。

自定义注解生成代码(三) 之javapoet案例实战




前面两个章节主要介绍了 javapoet 的基础语法和基本使用,感兴趣的同学可以查看博客 自定义注解生成代码(一)之 javaPoetAPI详解自定义注解生成代码(二) 之javapoetAPI使用举例

本章我打算使用更加贴近实战的案例巩固大家对javapoet的认识,废话不多说,直接上代码。

总结:

JavaPoet是square推出的开源java代码生成框架,提供Java Api生成.java源文件。这个框架功能非常有用,我们可以很方便的使用它根据注解、数据库模式、协议格式等来对应生成代码。通过这种自动化生成代码的方式,可以让我们用更加简洁优雅的方式要替代繁琐冗杂的重复工作。

官方源码 :https://github.com/square/javapoet

2.2 关键类说明

类名 说明 备注
JavaFile A Java file containing a single top level class 用于构造输出包含一个顶级类的Java文件
TypeSpec A generated class, interface, or enum declaration 生成类,接口,或者枚举
MethodSpec A generated constructor or method declaration 生成构造函数或方法
FieldSpec A generated field declaration 生成成员变量或字段
ParameterSpec A generated parameter declaration 用来创建参数
AnnotationSpec A generated annotation on a declaration 用来创建注解

在JavaPoet中,JavaFile是对.java文件的抽象,TypeSpec是类/接口/枚举的抽象,MethodSpec是方法/构造函数的抽象,FieldSpec是成员变量/字段的抽象。这几个类各司其职,但都有共同的特点,提供内部Builder供外部更多更好地进行一些参数的设置以便有层次的扩展性的构造对应的内容。

另外,它提供$L(for Literals), $S(for Strings), $T(for Types), $N(for Names)等标识符,用于占位替换。

官网介绍:https://docs.gradle.org/4.10.1/userguide/java_plugin.html#sec:incremental_annotation_processing


第一步 , 从 maven 仓库,找到相对稳定的版本引用 https://mvnrepository.com/

第二部 ,在项目对用moudle的 build.gradle文件中添加对应引用

	implementation 'com.squareup:javapoet:1.11.1'

第三步 , 愉快的开始使用

案例一 使用javapoet生成简单的helloword

  • 生成后的代码如下:

      package com.example.helloworld;
      
      public final class HelloWorld {
        public static void main(String[] args) {
          System.out.println("Hello, JavaPoet!");
        }
      }
    
  • javapoet代码,

生成代码生成一般是由内向外的,先生成里面的主方法然后生成外层的主类 HelloWorld ,最后将主类写入到 HelloWord.java 文件 或 者直接打印到控制台

    public static void main(String[] args) {
		//使用 MethodSpec 主方法main生成
        MethodSpec main = MethodSpec.methodBuilder("main")      //主方法的名称
                .addModifiers(Modifier.PUBLIC, Modifier.STATIC)
                .returns(void.class)
                .addParameter(String[].class, "args")
                .addStatement("$T.out.println($S)", System.class, "Hello, JavaPoet!")
                .build();
		
		//	使用 TypeSpec 生成 HelloWorld 类
        TypeSpec helloWorld = TypeSpec.classBuilder("HelloWorld")   //主类的名称
                .addModifiers(Modifier.PUBLIC, Modifier.FINAL)
                .addMethod(main)
                .addJavadoc("注释注解代码块")
                .build();

        try {
            JavaFile javaFile = JavaFile.builder("com.zbc.latte_compiler.javapoeatdemo", helloWorld)
                    .build();
            /**
             * 代码写入控制台
             */
            javaFile.writeTo(System.out);
            /**
       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值