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

news/2024/11/13 19:25:18/文章来源:https://www.cnblogs.com/alfredinchange/p/18544595

目录
  • 1 目标
  • 2 资源
  • 3 关联知识
    • java 注释分类
    • 使用到的注释说明
  • 4 模拟 lombok 实现 Getter 注释程序
  • 5 程序使用方法
  • 6 编译指令介绍
  • 7 参考资料(感谢)


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 原理分析与功能实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/833094.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 逆向之常用字符集互转

在过往的编程过程中,常常会因为碰到字符集问题而头痛,而每次在进行字符集转换的时候,各种搜索网上文档,想找字符集转换的示例程序,但是都不尽人意,本篇文章的目的就是彻底解决之前编程过程中对字符集认识以及字符集转换之间似懂非懂、云里雾里的状态,并在文章结尾附上 A…

团队作业4——项目冲刺-1-第二篇

团队作业4——项目冲刺-1-第二篇这个作业属于哪个课程 <计科22级34班>这个作业要求在哪里 <作业要求>这个作业的目标 修改完善需求规格说明书、系统设计、Alpha任务分配计划、测试计划GitHub 链接 https://github.com/tangliweiwww/ChatGpt🍟一、团队 1.团队名称…

[Paper Reading] Fusing Monocular Images and Sparse IMU Signals for Real-time Human Motion Capture

目录名称TL;DRMethodLocal Pose EstimationRNN-P1RNN-P2RNN-P3Global Translation EstimationRNN-T1RNN-T2RNN-T3Hidden State Feedback MechanismExperiment效果可视化总结与发散相关链接 名称 link 时间:23.09 作者与单位:主页: https://github.com/shaohua-pan/RobustCap…

HarmonyOS Next 入门实战 - 创建项目、主题适配

​开发一个简单的demo,其中涉及一些鸿蒙应用开发的知识点,其中涉及导航框架,常用组件,列表懒加载,动画,深色模式适配,关系型数据库等内容,在实践中学习和熟悉鸿蒙应用开发。 ​​ ​​ 首先下载并安装DevEco Studio开发环境,下载完成后按照提示安装即可,过程不在多说…

rust学习八、包和模块

总体上,也没有什么特别的地方,和其它语言比较起来。 我们可以看懂熟悉的字眼:包括、模块、use、公共等等 如果是英文,则需要知道crate、pub。 本章节对应相关书籍的第七章节. 一、一个rust可执行程序的大体结构 就本章节而言,尚未接触到一个非常复杂的工程结构,据说有什么…

starrycan的pwn学习记录1

一.Introducation 0x01 简介CTF 0x02 什么是pwn ”Pwn”是一个黑客语法的俚语词,是指攻破设备或者系统 。发音类似“砰”,对黑客而言这就是成功实施黑客攻击的声音--砰的一声,被“黑”的电脑或手机就被你操纵了。 CTF中的pwn CTF中的PWN主要是针对于二进制漏洞挖掘与利用,通…

计算机组成原理与操作系统 第二章 处理机组成与管理

目录1.CPU的功能和组成1.1CPU的四大功能1.2CPU的基本组成1.3 一条指令如何在CPU内运行2.指令系统2.1机器语言与指令2.1.1基本概念2.1.2一条指令一般应包含的信息2.1.3指令的类型与功能2.1.4寻址方式2.2指令格式的设计2.2.1基本概念2.2.2指令类型2.2.3操作码类型2.2.4指令设计2.…

UWB无线通信技术

UWB定位与通信技术标准第2章 UWB无线通信技术 UWB(超宽带)技术最早诞生于无线通信领域,该新兴技术一出现就备受关注UWB信号有着极大的带宽,其时间分辨率高、抗多径效应能力强,被认为是高速率短距离无线通信中具有很强竞争力的候选方案之一为此,本章寻根溯源,从UWB无线通…

极速启动,函数计算弹性降本能力再升级

本文将深入探讨函数计算如何通过技术革新实现提效降本,以及其在 AI 业务、数据处理和 Web 应用等多个领域的广泛应用。作者:墨飏 在数字化转型的大潮中,云计算成为推动创新和优化业务流程的关键力量。作为阿里巴巴集团的核心产品之一,函数计算(Function Compute)引领着 S…

用函数实现模块化程序设计四

数组作为函数参数数组作为函数参数 调用有参函数时,需要提供实参,实参可以是常量、变量或表达式 数组元素的作用与变量相当,一般来说,凡是变量可以出现的地方,都可以用数组元素代替,因此,数组元素也可以用作函数实参,其用法与变量相同,向形参船体数组元素的值。此外,…