如何用Java手写一个简易的lombok


本篇内容介绍了“如何用Java手写一个简易的lombok”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在面向对象编程中,必不可少的需要在代码中定义对象模型,而在基于Java的业务平台开发实践中尤其如此。相信大家在平时开发中也深有感触,本来是没有多少代码开发量的,但是因为定义的业务模型对象比较多,而需要重复写Getter/Setter、构造器方法、字符串输出的ToString方法、Equals/HashCode方法等。我们都知道Lombok能够替大家完成这些繁琐的操作,但是其背后的原理很少有人会关注或者说得清,本文会带着大家了解这一开发神器内部的运行机制与原理!Lombok是一款Java开发插件,使得Java开发者可以通过其定义的一系列注解来消除业务工程中冗长和繁琐的代码,尤其对于简单的Java模型对象(POJO)。在开发环境中使用Lombok插件后,Java开发人员可以节省出重复构建,诸如HashCode和Equals这样的方法以及各种业务对象模型的accessor和ToString等方法的大量时间。对于这些方法,它能够在编译源代码期间自动帮我们生成这些方法,且并不会如反射那样降低程序的性能。主要是这样比较灵活,即使你在实体类中新增了属性,也不用重新回过头来维护该实体的set和get方法等。安装插件,在编译类路径中加入l免费云主机域名ombok.jar包(具体安装方法可自己百度);在需要简化的类或方法上,加上要使用的注解;使用支持lombok的编译工具编译源代码(关于支持lombok的编译工具,见4.支持lombok的编译工具);编译得到的字节码文件中自动生成Lombok注解对应的方法或代码;接下来,我们进行lombok的原理分析,以Oracle的javac编译工具为例。自Java 6起,javac开始支持JSR 269 Pluggable Annotation Processing API规范,只要程序实现了该API,就能在java源码编译时调用定义的注解。举例来说,现在有一个实现了”JSR 269 API”的程序A,那么使用javac编译源码的时候具体流程如下:javac对源代码进行分析,生成一棵抽象语法树(AST);运行过程中调用实现了”JSR 269 API”的A程序;此时A程序就可以完成它自己的逻辑,包括修改第一步骤得到的抽象语法树(AST);javac使用修改后的抽象语法树(AST)生成字节码文件;详细的流程图如下:从上面的Lombok执行的流程图中可以看出,在Javac 解析成AST抽象语法树之后, Lombok 根据自己编写的注解处理器,动态地修改 AST,增加新的节点(即Lombok自定义注解所需要生成的代码),最终通过分析生成JVM可执行的字节码Class文件。使用Annotation Processing自定义注解是在编译阶段进行修改,而jdk的反射技术是在运行时动态修改,两者相比,反射虽然更加灵活一些但是带来的性能损耗更加大。Lombok本质上就是一个实现了JSR 269 API的程序,在使用javac的命令过程中,它生效的具体流程如下:javac对源代码进行分析,生成一棵抽象语法树(AST);运行过程中调用实现了JSR 269 API的lombok程序;编译机会调用lombok程序对第一步得到的AST进行处理,找到其注解所在类对应的语法树(AST),然后修改该语法树,增加注解对应的方法或代码片段到定义的相应树节点;javac使用修改后的抽象语法树生成最终的java字节码文件;使用的是idea工具进行开发,使用的jdk版本为1.8,因为我们是自己手写的idea提示会报错,但是能正常运行,因为lombok是idea针对于他有插件提示,我们的没有,但是也不影响正常使用。1.我们需要使用到jdk安装路径下lib包下的tools.jar,我们可以收到加入到项目依赖,也可以在maven中直接引入。我们直接使用idea新建一个普通的maven项目,然后配置如下,最后将这个项目打包一下,在别的项目中引入即可。maven配置如下:还有一个是 com.google.auto.service 这个是使用SPI机制的一个依赖,关于spi可以自行百度了解,这里就不再进行展开。关键核心接口:AbstractProcessor,这个就是在编译期处理注解的一个接口,然后我们可以通过实现这个接口通过修改字节码文件,最终在字节码文件中生成get和set方法。首先我们定义一个DATA注解:然后写一个 DataAnnotationProcessor 继承AbstractProcessor即可最后在maven项目中打包在别的项目直接使用即可,直接在别的项目的实体类上加上@Data注解即可生成get和set方法,但是没有方法提升,但是能正常运行,这里是idea的一个代码提示的问题,因为我们这个没有对应的idea插件,所以idea会提示报错,但是能正常运行。“如何用Java手写一个简易的lombok”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注百云主机网站,小编将为大家输出更多高质量的实用文章!

相关推荐: Minio与SpringBoot使用okhttp3问题如何解决

这篇文章主要介绍“Minio与SpringBoot使用okhttp3问题如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Minio与SpringBoot使用okhttp3问题如何解决”文章能帮助大家解决问题。使用…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 02/10 22:05
Next 02/10 22:05

相关推荐