Lombok 港控/mmm° 2022-05-14 16:45 183阅读 0赞 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/MOTUI/article/details/79012846 # Lombok使用 # ## 介绍 ## 在项目中使用Lombok可以减少很多重复代码的书写。比如说getter/setter/toString等方法的编写。 ## IDEA中的安装 ## 打开IDEA的Setting –> 选择Plugins选项 –> 选择Browse repositories –> 搜索lombok –> 点击安装 –> 安装完成重启IDEA –> 安装成功 ![idea安装Lombok][idea_Lombok] ## 引入依赖 ## 在项目中添加Lombok依赖jar,在pom文件中添加如下部分。(不清楚版本可以在[Maven仓库][Maven]中搜索) <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.18</version> <scope>provided</scope> </dependency> 1 2 3 4 5 6 7 8 ## 使用 ## 在对应的类或者方法上使用对应注解即可。例如: ![示例][getImage_fileId_5a542b603d0e5c5182000001] ## Lombok有哪些注解 ## * @Setter * @Getter * @Data * @Log(这是一个泛型注解,具体有很多种形式) * @AllArgsConstructor * @NoArgsConstructor * @EqualsAndHashCode * @NonNull * @Cleanup * @ToString * @RequiredArgsConstructor * @Value * @SneakyThrows * @Synchronized ## 注解详情 ## ### log ### 注解在 **类** 上。有如下可选择可用: //@CommonsLog private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class); //@JBossLog private static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class); //@Log private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName()); //@Log4j private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class); //@Log4j2 private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class); //@Slf4j private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class); //@XSlf4j private static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class); 1 2 3 4 5 6 7 8 9 10 11 12 13 14 默认情况下,记录器的主题(或名称)将是使用注释进行`@Log`注释的类的类名称。这可以通过指定`topic`参数来定制。例如:`@XSlf4j(topic="reporting")`。 该类型注解可以满足不同的日志系统的日志使用,Lombok提供了一些自定义配置项可以参看官方说明文档。 [Log官方介绍][Log] ### @Getter和@Setter ### 该注解使用在**类或者属性**上,该注解可以使用在类上也可以使用在属性上。生成的getter遵循布尔属性的约定。例如:boolean类型的sex,getter方法为`isSex`而不是`getSex` 在使用该注解时,会默认生成一个无参构造。和对应的getterhe setter方法 ![示例][getImage_fileId_5a54370fab644126e2000c49] 该注解也可以使用在单个属性上,会默认生成一个无参构造: ![示例][getImage_fileId_5a54370fab644126e2000c48] ### @Data ### 该注解使用在**类**上,该注解会提供getter、setter、equals、canEqual、hashCode、toString方法。 ![示例][getImage_fileId_5a54370fab644126e2000c43] ### @NonNull ### 该注解使用在**属性**上,该注解用于属的非空检查,当放在setter方法的字段上,将生成一个空检查,如果为空,则抛出`NullPointerException`。 该注解会默认是生成一个无参构造。 ![示例][getImage_fileId_5a54370fab644126e2000c47] ### @toString ### 该注解使用在**类**上,该注解默认生成任何非讲台字段以名称-值的形式输出。 1、如果需要可以通过注释参数`includeFieldNames`来控制输出中是否包含的属性名称。 2、可以通过`exclude`参数中包含字段名称,可以从生成的方法中排除特定字段。 3、可以通过`callSuper`参数控制父类的输出。 * includeFieldNames是否包含属性名称: ![示例][getImage_fileId_5a54370fab644126e2000c42] * exclude 排除指定字段 ![示例][getImage_fileId_5a54370fab644126e2000c45] * callSuper输出父类属性 ![示例][getImage_fileId_5a543c1aab644126e2000d38] 注意:父类也要有toString方法,不然打印的是对象内存地址 //父类无toString方法 Person(super=com.motui.Person@3abfe836, firstName=motui, address=北京, dateOfBirth=Tue Jan 09 11:49:05 CST 2018, sex=true) //父类有toString方法 Person(super=People(id=111), firstName=motui, address=北京, dateOfBirth=Tue Jan 09 11:50:11 CST 2018, sex=true) 1 2 3 4 ### @EqualsAndHashCode ### 该注解使用在**类**上,该注解在类级别注释会同时生成`equals`和`hashCode`。 注意继承关系的时候该注解的使用。详细介绍参照[官方介绍][Link 1] ![示例][getImage_fileId_5a543f5dab644126e2000d85] 存在继承关系需要设置`callSuper`参数为`true`。 ### @Data ### 该注解使用在**类**上,该注解是最常用的注解,它结合了@ToString,@EqualsAndHashCode, @Getter和@Setter。本质上使用`@Data`注解,类默认`@ToString`和`@EqualsAndHashCode`以及每个字段都有`@Setter`和`@getter`。该注解也会生成一个公共构造函数,可以将任何`@NonNull`和`final`字段作为参数。 虽然`@Data`注解非常有用,但是它没有与其他注解相同的控制粒度。`@Data`提供了一个可以生成静态工厂的单一参数,将`staticConstructor`参数设置为所需要的名称,Lombok自动生成的构造函数设置为私有,并提供公开的给定名称的静态工厂方法。 ![示例][getImage_fileId_5a546265ab644126e2001263] ### @AllArgsConstructor ### 该注解使用在**类**上,该注解提供一个全参数的构造方法,默认不提供无参构造。 ![示例][getImage_fileId_5a546265ab644126e2001260] ### @NoArgsConstructor ### 该注解使用在**类**上,该注解提供一个无参构造 ![示例][getImage_fileId_5a546266ab644126e2001264] ### @RequiredArgsConstructor ### 该注解使用在**类**上,使用类中所有带有 @NonNull 注解的或者带有 final 修饰的成员变量生成对应的构造方法。 ![实例][getImage_fileId_5a546265ab644126e200125f] ### @Value ### 这个注解用在 类 上,会生成含所有参数的构造方法,get 方法,此外还提供了equals、hashCode、toString 方法。 **注意:没有setter** ![示例][getImage_fileId_5a546265ab644126e2001261] ### @Cleanup ### 该注解使用在**属性**前,该注解是用来保证分配的资源被释放。在本地变量上使用该注解,任何后续代码都将封装在try/finally中,确保当前作用于中的资源被释放。默认`@Cleanup`清理的方法为`close`,可以使用value指定不同的方法名称。 ![示例][getImage_fileId_5a546266ab644126e2001266] ### @Synchronized ### 该注解使用在**类或者实例方法**上,Synchronized在一个方法上,使用关键字可能会导致结果和想要的结果不同,因为多线程情况下会出现异常情况。Synchronized 关键字将在this示例方法情况下锁定当前对象,或者class讲台方法的对象上多锁定。这可能会导致死锁现象。一般情况下建议锁定一个专门用于此目的的独立锁,而不是允许公共对象进行锁定。该注解也是为了达到该目的。 ![示例][getImage_fileId_5a546265ab644126e2001262] ### @SneakyThrows ### 该注解使用在**方法**上,这个注解用在 方法 上,可以将方法中的代码用 try-catch 语句包裹起来,捕获异常并在 catch 中用 Lombok.sneakyThrow(e) 把异常抛出,可以使用 @SneakyThrows(Exception.class) 的形式指定抛出哪种异常。该注解需要谨慎使用。详情参看[官方介绍][Link 2] ![示例][getImage_fileId_5a546266ab644126e2001265] ## 结语 ## Lombok的目的是减少代码的重复编写,并提供比较好的解决方案。当然也存在一些争议性的注解,可以根据实际场景进项使用。Lombok有一些实验注解可以在官网查看。 <script> (function(){ function setArticleH(btnReadmore,posi){ var winH = $(window).height(); var articleBox = $("div.article_content"); var artH = articleBox.height(); if(artH > winH*posi){ articleBox.css({ 'height':winH*posi+'px', 'overflow':'hidden' }) btnReadmore.click(function(){ articleBox.removeAttr("style"); $(this).parent().remove(); }) }else{ btnReadmore.parent().remove(); } } var btnReadmore = $("#btn-readmore"); if(btnReadmore.length>0){ if(currentUserName){ setArticleH(btnReadmore,3); }else{ setArticleH(btnReadmore,1.2); } } })() </script> </article> [idea_Lombok]: /images/20220503/d8327aac02844f72b5de81cb7fe53a6e.png [Maven]: http://mvnrepository.com/ [getImage_fileId_5a542b603d0e5c5182000001]: /images/20220503/7b4b783674b04c268f39724f28e5d224.png [Log]: https://projectlombok.org/features/log [getImage_fileId_5a54370fab644126e2000c49]: /images/20220503/da60a4c010404c29b67957158f2fe821.png [getImage_fileId_5a54370fab644126e2000c48]: /images/20220503/c1b21de539564770b3ded65fbd180cdd.png [getImage_fileId_5a54370fab644126e2000c43]: /images/20220503/7798335c0190410db6eaef2912d01762.png [getImage_fileId_5a54370fab644126e2000c47]: /images/20220503/ed61246c7cf844e18f73b5428440624e.png [getImage_fileId_5a54370fab644126e2000c42]: /images/20220503/dad324ea5e024467a11053eb3d215612.png [getImage_fileId_5a54370fab644126e2000c45]: /images/20220503/8d584faef2d04785b53e3e518c60e93d.png [getImage_fileId_5a543c1aab644126e2000d38]: /images/20220503/d68a97f59d1b43cb8ca82c515cfac138.png [Link 1]: http://jnb.ociweb.com/jnb/jnbJan2010.html [getImage_fileId_5a543f5dab644126e2000d85]: /images/20220503/90693b5f2d8f42d39c3302d7e1cb3890.png [getImage_fileId_5a546265ab644126e2001263]: /images/20220503/70137f16a8ea4d4f845fd5a7ef7dbed1.png [getImage_fileId_5a546265ab644126e2001260]: /images/20220503/507735bb5a754a06933baaa1bb5a4392.png [getImage_fileId_5a546266ab644126e2001264]: /images/20220503/3dea2f83e427465a82c32748fcd60ef9.png [getImage_fileId_5a546265ab644126e200125f]: /images/20220503/643f3f58bdfd402e9a6ac9c41117ad27.png [getImage_fileId_5a546265ab644126e2001261]: /images/20220503/495a1c4de9c044298c9135c6e1d23f59.png [getImage_fileId_5a546266ab644126e2001266]: /images/20220503/1c4023f4265b4c6db99fb3538c2f6276.png [getImage_fileId_5a546265ab644126e2001262]: /images/20220503/80b0ead3063641d790f1e3b4e38d10b0.png [Link 2]: https://projectlombok.org/features/SneakyThrows [getImage_fileId_5a546266ab644126e2001265]: /images/20220503/444718ae5a2e4a4085e0b49f43035be3.png
相关 lombok 为什么需要lombok Java项目中,充斥着太多不友好的代码:POJO的getter/setter/toString;这些样板代码既没有技术含量,写起来又比较麻烦,又影响 绝地灬酷狼/ 2022年12月11日 02:28/ 0 赞/ 108 阅读
相关 lombok 转自:http://blog.csdn.net/mlinge/article/details/51340362 lombok是什么 lombok 是通过提供简单注 傷城~/ 2022年07月12日 06:56/ 0 赞/ 175 阅读
相关 lombok 转自:http://blog.csdn.net/mlinge/article/details/51340362 lombok是什么 lombok 是通过提供简单注 - 日理万妓/ 2022年07月12日 06:56/ 0 赞/ 168 阅读
相关 Lombok 【问题描述】 长假回来上班后的第一天,开发环境竟然出问题了。代码中所有的getter和setter方法都报错,显示各个实体类中没有提供对应的get/set方法。 ゝ一世哀愁。/ 2022年06月07日 03:44/ 0 赞/ 186 阅读
相关 Lombok https://www.jianshu.com/p/365ea41b3573 Lombok简介\\\ Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些 骑猪看日落/ 2022年06月02日 00:45/ 0 赞/ 224 阅读
相关 Lombok Lombok简介 > Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对 桃扇骨/ 2022年05月22日 00:23/ 0 赞/ 181 阅读
相关 Lombok 官网下载地址[https://projectlombok.org][https_projectlombok.org] lombok是一个可以帮助我们简化java代码编写的工具 以你之姓@/ 2022年05月18日 23:13/ 0 赞/ 209 阅读
相关 lombok lombok简介 lombok是暑假来到公司实习的时候发现的一个非常好用的小工具,刚见到的时候就感觉非常惊艳,有一种相见恨晚的感觉,用了一段时间之后感觉的确挺不错,所以特 阳光穿透心脏的1/2处/ 2022年05月17日 04:46/ 0 赞/ 174 阅读
相关 Lombok 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/MOTUI/article/details/79012846 Lombok 港控/mmm°/ 2022年05月14日 16:45/ 0 赞/ 184 阅读
相关 Lombok 概述 Lombok 提供了一些注解来帮助我们简化消除一些必须有但显得臃肿的 java 代码,如 getting 和 setting,它是通过编译时字节码修改完成,性 素颜马尾好姑娘i/ 2021年09月10日 06:08/ 0 赞/ 349 阅读
还没有评论,来说两句吧...