Java注解代码生成

最近本着不求甚解的态度重温了一下主流框架的源码,所以趁热打铁的总结一下,学习框架或开发框架所必备的基础知识:

1、简介

在我们常用的框架中注解和自动生成代码的身影很常见,因为注解和自动生成的配合,从而简化和统一代码,使框架使用简单且容易扩展,典型且最熟悉的就是ButterKnife,主要功能利用注解省略了findViewById的过程,当然也提供了其他的监听、绑定等很多强大的操作符,熟悉ButterKnife源码的应该知道,ButterKnife的实现就是利用我们今天的要讲的内容,我们在文章的最后也会尝试编写一个简单的ButterKnife;

2、构建

2.1、创建Java Library
在Android项目中创建Java Library
在这里插入图片描述
2.2、配置build.gradle 文件

implementation 'com.squareup:javapoet:1.11.1'
implementation 'com.google.auto.service:auto-service:1.0-rc4'

2.3、创建AbstractProcessor的子类
代码的自动生成使用的是AbstractProcessor类,所以第一步要添加AbstractProcessor的实现类

@AutoService(Processor.class)
public class MYProcessor extends AbstractProcessor {

    private Filer mFiler;
    private Elements mElements;
    private Messager mMessage;


    @Override
    public synchronized void init(ProcessingEnvironment processingEnv) {
        super.init(processingEnv);
        mFiler = processingEnv.getFiler();
        mElements = processingEnv.getElementUtils();
        mMessage = processingEnv.getMessager();

    }

    @Override
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {

        MethodSpec methodSpec = MethodSpec.methodBuilder("processMethod")   // 添加方法
                .addModifiers(Modifier.PUBLIC) // 添加方法修饰符
                .addParameter(String.class, "name") // 添加方法参数
                .build();

        TypeSpec typeSpec = TypeSpec.classBuilder("ProcessCreate")  // 设置要生成的类
                .addModifiers(Modifier.PUBLIC) // 添加类修饰符
                .addMethod(methodSpec)  // 将方法添加类中
                .build();

        JavaFile javaFile = JavaFile.builder("com.example.administrator.permission", typeSpec).build();   //设置JavaFile
        try {
            javaFile.writeTo(mFiler);  // 写入
        } catch (IOException e) {
            e.printStackTrace();
        }
        return true;
    }

    @Override
    public Set<String> getSupportedAnnotationTypes() {
        Set<String> types = new LinkedHashSet<>();
        types.add(Override.class.getCanonicalName()); 
        return types;
    }
}

上面是实现类的全部代码,作几点说明:

  • 添加@AutoService(Processor.class)注解

  • 主要方法介绍:

  • init(ProcessingEnvironment env): 每一个注解处理器类都必须有一个空的构造函数。然而,这里有一个特殊的init()方法,它会被注解处理工具调用,并输入ProcessingEnviroment参数。ProcessingEnviroment提供很多有用的工具类Elements,Types和Filer;

  • process(Set<? extends TypeElement> annoations, RoundEnvironment env):这相当于每个处理器的主函数main()。在这里写扫描、评估和处理注解的代码,

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Java中,有许多工具和框架可以帮助自动生成代码。这些工具可以大大提高开发效率和减少手动编写重复的代码的工作量。下面是一些常用的自动生成代码的工具和技术: 1. IDE(集成开发环境):主流的Java IDE(如Eclipse、IntelliJ IDEA、NetBeans)都提供了自动生成代码的功能。你可以使用快捷键或菜单选项来自动生成常见的代码片段,如getter/setter方法、构造函数、重写父类方法等。 2. 代码模板:IDE还提供了代码模板功能,允许你定义自己的代码模板。你可以编写一些预定义的代码模板,然后通过简单的命令或快捷键将其插入到你的代码中。这对于生成常用的代码块(如单例模式、工厂模式)非常有用。 3. 代码生成器:有一些专门的代码生成器工具可以根据特定的需求自动生成Java代码。例如,MyBatis Generator可以根据数据库表结构生成数据访问对象(DAO)和实体类;JHipster可以生成整个Java应用程序的骨架代码。 4. 模板引擎:模板引擎允许你使用模板文件和占位符来生成Java代码。你可以在模板中定义占位符,然后使用模板引擎将占位符替换为实际的代码。常见的Java模板引擎包括Freemarker、Velocity和Thymeleaf。 5. 代码生成注解:一些框架(如Lombok和MapStruct)提供了注解,可以在编译时自动生成一些常见的代码。例如,Lombok的@Data注解可以自动生成getter/setter方法和equals/hashCode方法。 以上是一些常见的Java代码自动生成技术和工具。根据你的具体需求和项目的特点,选择适合你的工具或技术来提高开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值