首页 > 其他分享 >信步漫谈之模拟lombok实现Getter注释

信步漫谈之模拟lombok实现Getter注释

时间:2024-11-13 19:21:53浏览次数:1  
标签:java 漫谈 编译 Java Getter 注解 lombok class

目录


1 目标

  • 模拟 lombok 实现 Getter 注释

2 资源

lombok 官网:https://projectlombok.org/
lombok github地址:https://github.com/projectlombok/lombok

3 关联知识

java 注释分类

  • Java中的注解分为运行时注解和编译时注解
    • 编译期:Java语言的编译期是一段不确定的操作过程,因为它可能是将.java文件转化成.class文件的过程;也可能是指将字节码转变成机器码的过程;还可能是直接将*.java编译成本地机器代码的过程
    • 运行期:从JVM加载字节码文件到内存中,到最后使用完毕以后卸载的过程都属于运行期的范畴。
  • 注解处理工具apt(Annotation Processing Tool),这是Sun为了帮助注解的处理过程而提供的工具,apt被设计为操作Java源文件,而不是编译后的类。它是javac的一个工具,中文意思为编译时注解处理器。APT可以用来在编译时扫描和处理注解。通过APT可以获取到注解和被注解对象的相关信息,在拿到这些信息后我们可以根据需求来自动的生成一些代码,省去了手动编写。注意,获取注解及生成代码都是在代码编译时候完成的,相比反射在运行时处理注解大大提高了程序性能。APT的核心是AbstractProcessor类。

使用到的注释说明

  • SupportedAnnotationTypes:表示该处理器要处理的注解
  • SupportedSourceVersion:表示所支持的Java版本
  • Retention:是jdk的一个元注解,用来指示其它注解类型保留的生命周期。注解上面有一个属性value,它是RetentionPolicy类型的枚举类,RetentionPolicy枚举类中有三个值。
    • SOURCE 修饰的注解:修饰的注解,表示注解的信息会被编译器抛弃,不会留在class文件中,注解的信息只会留在源文件中
    • CLASS 修饰的注解:表示注解的信息被保留在class文件(字节码文件)中当程序编译时,但不会被虚拟机读取在运行的时候
    • RUNTIME 修饰的注解:表示注解的信息被保留在class文件(字节码文件)中当程序编译时,会被虚拟机保留在运行时。所以它能够通过反射调用,所以正常运行时注解都是使用的这个参数
  • Target:是jdk的一个元注解,用来说明所修饰的对象范围。注解上面也有个属性value,它是ElementType类型的枚举。是用来修饰此注解作用在哪的。
    • TYPE:用于描述类、接口(包括注解类型) 或枚举声明
    • FIELD:用于描述域
    • METHOD:用于描述方法
    • PARAMETER:用于描述参数
    • CONSTRUCTOR:用于描述构造器
    • LOCAL_VARIABLE:用于描述局部变量
    • ANNOTATION_TYPE:用于描述声明
    • PACKAGE:用于描述包
    • TYPE_PARAMETER:用来标注类型参数,需要jdk1.8或以上
    • TYPE_USE:能标注任何类型名称,需要jdk1.8或以上

4 模拟 lombok 实现 Getter 注释程序

https://gitee.com/alfredinchange/java-developer.git 下 com.alfred.java.sllombok

5 程序使用方法

  • 执行 compile.bat 脚本进行编译和执行,会自动创建 classes 文件夹
  • 查看编译执行后 Main 的输出
  • 注意:代码 Main 中报错是正常的,因为还未通过编译创建 getUserName 方法

6 编译指令介绍

  • javac 是 Java 编译器,用于将 Java 源代码(.java 文件)编译成 Java 字节码(.class 文件)
    • 基本格式:javac [options] sourcefiles
    • 加上 -cp 或 -classpath 选项用于指定在编译过程中需要搜索的类或包的位置。这通常是包含第三方库和其他依赖项的目录或 JAR 文件的路径
javac -cp /path/to/classes:/another/path/to/libraries/*.jar MyClass.java
  • java 命令用于运行 Java 程序。它启动 Java 虚拟机(JVM),并加载指定的类作为应用程序的入口点
    • 基本格式:java [options] class [args...]
    • 使用 -cp 或 -classpath 选项用于指定在运行时需要搜索的类或包的位置
java -cp /path/to/classes:/another/path/to/libraries/*.jar MyClass
  • javap 是 Java 反汇编器,用于将 .class 文件中的字节码反汇编成更可读的格式
    • 基本格式:javap [options] classfiles
    • 使用 -p(注意,javap 不直接支持 -cp 或 -classpath):javap 本身不直接需要 -cp 或 -classpath(因为它通常只处理已编译的 .class 文件)

7 参考资料(感谢)

Lombok经常用,但是你知道它的原理是什么吗?

Lombok框架集成及原理解析

Lombok 原理分析与功能实现

标签:java,漫谈,编译,Java,Getter,注解,lombok,class
From: https://www.cnblogs.com/alfredinchange/p/18544595

相关文章

  • 信步漫谈之自定义AOP注释
    目录1目标2AOP基本概念3AOP之Execution表达式解释4AOP注释执行顺序5知识池6源码7参考资料(感谢)1目标自定义注释的AOP实现2AOP基本概念Aspect【切面】:通常是一个类,里面可以定义切入点和通知;JointPoint【连接点】:程序执行过程中明确的点,一般是方法的调用;Advice......
  • Lombok
    Lombok使用:1、添加依赖<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.4</version> <scope>provided</scope></dependency>2、安装插件--lombok3、常用注解@S......
  • 如何正确导入mapstruct,同时避免编译时mapstruct与lombok冲突
    本文介绍编译时产生的冲突,导包时期产生的冲突请劳驾查找其他解决方法一般情况下只需要按照官网的导入即可,但如果同时使用了lombok,则需要小心。详细信息可以查看官网文档:MapStruct1.5.5.Final集成lombok注意:在编译测试的时候,一定先清理再编译。这样可以解决80%的报错问题......
  • lombok 在 jdk 23 版本下javac无法编译问题, 解决方法
    问题现象Javadoc"cannotfindsymbol"errorwhenusingLombok's@Builderannotation 看到官方提交的代码ant在脚本中添加如下参数<propertyname="compiler.args"value="-J--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED......
  • AI绘画漫谈——从AI网页生成说起
    1.又说“前端已死”为什么说“又”呢?因为前两年我在一些博客网站三天两头就能看到这个标题,虽然今年好像换话题了,但感觉前端每年都要死个七八次,当然这里面还是标题党偏多,不过也体现了有一些开发者对自己当前所做的工作内容的忧虑,尤其是这一次冲击的浪潮是来自于AI的,经历了两年......
  • Java学习路线:Lombok(二)Lombok实用注解1
    目录@Getter和@Setter@Accessors@ToString 前置知识:注解以下是我整理的注解学习线路,按顺序学习完下列知识就可以无痛理解本篇了!Java学习路线:JavaSE——注解-CSDN博客Java学习路线:JavaSE——元注解-CSDN博客Java学习路线:JavaSE——自定义注解-CSDN博客@Getter......
  • 漫谈自动化测试
    前几天看到星球里几位同学在讨论各自所在团队的自动化测试实践案例和踩过的坑,蛮有意思的。比如为了响应领导号召和满足绩效考核,搞各种各样的覆盖率指标;比如为了赶自动化测试覆盖率进度,每个接口和用例象征性的校验一下(甚至不校验不断言),各种各样意想不到的操作。自动化测试是必......
  • AOT漫谈专题(第六篇): C# AOT 的泛型,序列化,反射问题
    一:背景1.讲故事在.NETAOT编程中,难免会在泛型,序列化,以及反射的问题上纠结和反复纠错尝试,这篇我们就来好好聊一聊相关的处理方案。二:常见问题解决1.泛型问题研究过泛型的朋友应该都知道,从开放类型上产下来的封闭类型往往会有单独的MethodTable,并共用EEClass,对于值类型......
  • lombok爱恨情仇
    简介它可以自动插入到你的编辑器和构建工具中,为你的Java增添趣味。永远不要再写另一个getter或equals方法,用一个注释你的类就有了一个功能齐全的构建器,自动化你的日志变量,等等。可以说是十分方便好用。遇到过的问题变量顺序注解生成的构造函数参数列表是有顺序的。使用IDE......
  • Lombok介绍
    Lombok(ProjectLombok)是一个用于Java编程语言的开源库,旨在减少Java代码中的冗余和样板代码,提高开发人员的生产力。它通过使用注解来自动生成Java类的常见方法和代码,从而使开发人员能够编写更简洁、更具可读性和更易维护的代码。Lombok的主要目标是简化Java开发,减少样板代......