JAVA技术交流QQ群:170933152

简单说就是在类中不用再写:get set方法,hashcode toStirng equals方法了

eclipse中集成:

update时,勾选上Force Update of Snapshots/Releases)

首先下载一个Lombok的jar包--https://projectlombok.org/download.html

双击lombok.jar,它会自动检测到eclipse的安装路径,点击"install/update"按钮,然后重新启动eclipse。

eclipse.ini文件中会出现-javaagent:D:\eclipse\eclipse\lombok.jar,说明引入成功。

重启之后,在项目的pom.xml文件中引入Lombok.jar:

<dependency>  
          <groupId>org.projectlombok</groupId>  
          <artifactId>lombok</artifactId>  
          <version>1.16.20</version>  
          <scope>provided</scope>  
      </dependency>

--------------------

idea中集成:

IntelliJ IDEA lombok插件的安装和使用

分步阅读

IntelliJ IDEA是一款非常优秀的集成开发工具,功能强大,而且插件众多。lombok是开源的代码生成库,是一款非常实用的小工具,我们在编辑实体类时可以通过lombok注解减少getter、setter等方法的编写,在更改实体类时只需要修改属性即可,减少了很多重复代码的编写工作。本文小编只介绍IntelliJ IDEA中lombok插件的安装和配置以及简单的使用方法,更多请大家参考下文lombok在Eclipse下的使用,里面包含了使用方法和常用lombok注解的介绍。

2Eclipse安装Lambok及Lambok的使用介绍

工具/原料

  • IntelliJ IDEA

  • 联网

lombok插件的安装

  1. 1

    首先我们需要安装IntelliJ IDEA中的lombok插件,打开IntelliJ IDEA后点击菜单栏中的File-->Settings,或者使用快捷键Ctrl+Alt+S进入到设置页面。

  2. 2

    我们点击设置中的Plugins进行插件的安装,在右侧选择Browse repositories...,然后在搜索页面输入lombok变可以查询到下方的Lombok Plugin,鼠标点击Lombok Plugin可在右侧看到Install按钮,点击该按钮便可安装。

  3. 3

    我们在安装页面可以看到lombok具体支持的所有注解,在安装过程中有Downloading Plugins的提示,安装过程中进度条会变化。需要提醒的是,在安装过程中一定要保证网络连接可用且良好,否则可能会安装失败。安装成功后我们可以看到右侧的Restart按钮,此时可先不操作,因为我们还有后续的配置工作。安装完成后我们再回到Plugins,此时在右侧可以搜索到lombok,而安装前是不行的。

    END

配置注解处理器

  1. 1

    同样我们在Settings设置页面,我们点击Build,Execution,Deployment-->选择Compiler-->选中Annotation Processors,然后在右侧勾选Enable annotation processing即可。

    END

lombok插件的使用

  1. 使用前我们需要说明的是安装的插件只是一个调用,就像我们使用maven插件一样,本机需要安装maven才行。我们在使用lombok前也需要添加lombok的依赖。lombok的版本一直在更新,大家可以在百度搜索框输入lombok maven找到最新的依赖版本。

    <dependency>    <groupId>org.projectlombok</groupId>    <artifactId>lombok</artifactId>    <version>1.16.10</version></dependency>

  2. 接下来我们编辑一个实体类Student,添加三个属性,最后在类上添加@Data属性,这个注解可以帮我们在.class文件中生成类中所有属性的get/set方法、equals、canEqual、hashCode、toString方法等。

  3. 那么编辑完代码后我们如何查看生成的方法呢?在菜单栏点击View-->Tool Windows-->Structure,便可以看到类中所有的方法了,这些都是lombok帮我自动生成的。

    步骤阅读

    END

注意事项

  • 安装lombok插件过程中需要联网,另外安装需要配置Annotation Processors支持。

-------------------

sts中集成:

引言:Spring Boot是非常高效的开发框架,lombok是一套代码模板解决方案,将极大提升开发的效率,这里介绍给大家使用。

1. Lombok

Lombok想要解决了的是在我们实体Bean中大量的Getter/Setter方法,以及toString, hashCode等可能不会用到,但是某些时候仍然需要复写,以期方便使用的方法;在使用Lombok之后,将由其来自动帮你实现代码生成,注意,其是在运行过程中,帮你自动生成的。就是说,将极大减少你的代码总量。

Lombok的官方地址: https://projectlombok.org/

2. LomBok的安装

在SpringBoot1.4.1项目的pom.xml中新增如下信息:

<dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
         </dependency>
 注意这里无需指定版本,因为Spring Boot中已经默认引入了这个类库,且指定了其scope。 这个即将lombok引入了项目,可以引用其类库标注。
  针对不同的IDE,lombok提供了不同的解决方案,笔者使用的是STS,故这介绍一下如何使用lombok插件在STS中:

>> 1.  下载最新的lombok,最新版本。1.16.10  https://projectlombok.org/download.html

>> 2.  切到lombok下载的目录,运行命令: java -jar lombok.jar

选中目录之后,就会看到如下窗口:

大家可以看到,这里的会使用javaagent的方式写入STS的启动过程中。在确定之后,我们切到sts的安装目录,验证一下STS.ini文件:

大家也可以发现,在STS的目录下,也有lombok.jar文件的存在,整个安装过程即可完成。

3.   Lombok的使用

主要是基于标注来进行信息的封装和使用:

@NonNull:  标识对象是否为空,为空则抛出异常

@Getter:   自动生成Getter方法

@Setter:  自动生成Setter

@ToString:  覆盖tostring方法

@EqualsAndHashCode: 覆盖equal和hashCode方法

@Data:  @Getter/@Setter, @ToString, @EqualAndHashCode等组合

@@NoArgsConstructor @AllArgsConstructor注解使用

@Slf4j:  默认使用slf4j的日志对象

4. 使用示例:

示例Getter/Setter方法以及日志使用:

import lombok.Data;
import lombok.extern.slf4j.Slf4j;
 
@Slf4j
@Data
public class TestBean {
    private String name;
    private int age;
}
  测试用例:

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
 
import lombok.extern.slf4j.Slf4j;
 
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class TestEntityBean {
 
    TestBean bean = new TestBean();
    
    @Autowired
    private MyCase mycase;
    
    
    //@Test
    public void test() {
       bean.setAge(123);
       bean.setName("zhangsan");
       
       log.info(bean.toString());
    }
}
 用例运行结果

.   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.4.1.RELEASE)
 
2016-10-24 11:49:19.521  INFO 700 --- [           main] org.cuckoo.report.brain.TestEntityBean   : Starting TestEntityBean on 08-201412015324 with PID 700 (started by junfengchen in D:\Dev\workspace\JSPDemo)
2016-10-24 11:49:19.523  INFO 700 --- [           main] org.cuckoo.report.brain.TestEntityBean   : No active profile set, falling back to default profiles: default
2016-10-24 11:49:19.647  INFO 700 --- [           main] o.s.w.c.s.GenericWebApplicationContext   : Refreshing org.springframework.web.context.support.GenericWebApplicationContext@4f80542f: startup date [Mon Oct 24 11:49:19 CST 2016]; root of context hierarchy
2016-10-24 11:49:22.191  INFO 700 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@4f80542f: startup date [Mon Oct 24 11:49:19 CST 2016]; root of context hierarchy
2016-10-24 11:49:22.290  INFO 700 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/foo]}" onto public java.lang.String org.cuckoo.report.brain.WelcomeController.foo(java.util.Map<java.lang.String, java.lang.Object>)
2016-10-24 11:49:22.293  INFO 700 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/],methods=[GET]}" onto public java.lang.String org.cuckoo.report.brain.WelcomeController.welcome(java.util.Map<java.lang.String, java.lang.Object>)
2016-10-24 11:49:22.295  INFO 700 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2016-10-24 11:49:22.296  INFO 700 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2016-10-24 11:49:22.351  INFO 700 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-10-24 11:49:22.351  INFO 700 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-10-24 11:49:22.409  INFO 700 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-10-24 11:49:22.642  INFO 700 --- [           main] org.cuckoo.report.brain.TestEntityBean   : Started TestEntityBean in 3.868 seconds (JVM running for 4.854)
2016-10-24 11:49:22.676  INFO 700 --- [           main] org.cuckoo.report.brain.TestEntityBean   : TestBean(name=zhangsan, age=123)
2016-10-24 11:49:22.691  INFO 700 --- [       Thread-2] o.s.w.c.s.GenericWebApplicationContext   : Closing org.springframework.web.context.support.GenericWebApplicationContext@4f80542f: startup date [Mon Oct 24 11:49:19 CST 2016]; root of context hierarchy

大家可以注意到@Slf4j替代掉了冗余的logger声明语句, @Data不必在使用Getter/Setter方法,其中toString默认反射对象中的所有属性,非常的好用。
--------------------- ---------------

这里是介绍的原理:

一、项目背景
在写Java程序的时候经常会遇到如下情形:
新建了一个Class类,然后在其中设置了几个字段,最后还需要花费很多时间来建立getter和setter方法
lombok项目的产生就是为了省去我们手动创建getter和setter方法的麻烦,它能够在我们编译源码的时候自动帮我们生成getter和setter方法。即它最终能够达到的效果是:在源码中没有getter和setter方法,但是在编译生成的字节码文件中有getter和setter方法
比如源码文件:
import java.io.Serializable;
 
 
import lombok.Data;
 
 
@Data
public class BasicClusterInfo implements Serializable {
 
 
    private static final long serialVersionUID = 3478135817352393604L;
    private String            hbaseKey;
    private int               receiverCount;
}

以下是编译上述源码文件得到的字节码文件,对其反编译得到的结果
public class BasicClusterInfo extends java.lang.Object implements java.io.Serializable{
    public BasicClusterInfo();
    public java.lang.String getHbaseKey();
    public int getReceiverCount();
    public void setHbaseKey(java.lang.String);
    public void setReceiverCount(int);
    public boolean equals(java.lang.Object);
    public boolean canEqual(java.lang.Object);
    public int hashCode();
    public java.lang.String toString();
}

二、使用方法
使用lombok项目的方法很简单,分为四个步骤:
1)在需要自动生成getter和setter方法的类上,加上@Data注解
2)在编译类路径中加入lombok.jar包
3)使用支持lombok的编译工具编译源代码(关于支持lombok的编译工具,见“四、支持lombok的编译工具”)
4)编译得到的字节码文件中自动生成了getter和setter方法

三、原理分析
接下来进行lombok能够工作的原理分析,以Oracle的javac编译工具为例。
自从Java 6起,javac就支持“JSR 269 Pluggable Annotation Processing API”规范,只要程序实现了该API,就能在javac运行的时候得到调用。
举例来说,现在有一个实现了"JSR 269 API"的程序A,那么使用javac编译源码的时候具体流程如下:
1)javac对源代码进行分析,生成一棵抽象语法树(AST)
2)运行过程中调用实现了"JSR 269 API"的A程序
3)此时A程序就可以完成它自己的逻辑,包括修改第一步骤得到的抽象语法树(AST)
4)javac使用修改后的抽象语法树(AST)生成字节码文件
详细的流程图如下:

lombok本质上就是这样的一个实现了"JSR 269 API"的程序。在使用javac的过程中,它产生作用的具体流程如下:
1)javac对源代码进行分析,生成一棵抽象语法树(AST)
2)运行过程中调用实现了"JSR 269 API"的lombok程序
3)此时lombok就对第一步骤得到的AST进行处理,找到@Data注解所在类对应的语法树(AST),然后修改该语法树(AST),增加getter和setter方法定义的相应树节点
4)javac使用修改后的抽象语法树(AST)生成字节码文件

四、支持lombok的编译工具
1)由“三、原理分析”可知,Oracle javac直接支持lombok
2)常用的项目管理工具Maven所使用的java编译工具来源于配置的第三方工具,如果我们配置这个第三方工具为Oracle javac的话,那么Maven也就直接支持lombok了
3)Intellij Idea配置的编译工具为Oracle javac的话,也就直接支持lombok了。
4)Eclipse中使用的不是Oracle javac这个编译工具,而是自己实现的Eclipse Compiler for Java (ECJ).要想使ECJ支持lombok,得进行设置,具体是在Eclipse程序目录中的eclipse.ini文件中添加如下两行设置:
-javaagent:[lombok.jar所在路径]
-Xbootclasspath/a:[lombok.jar所在路径]

五、其他问题
现在使用Intellij Idea作为Java项目的IDE,配置Oracle javac作为编译工具。
现在有一个A类,其中有一些字段,没有创建它们的setter和getter方法,使用了lombok的@Data注解,另外有一个B类,它调用了A类实例的相应字段的setter和getter方法
编译A类和B类所在的项目,并不会报错,因为最终生成的A类字节码文件中存在相应字段的setter和getter方法
但是,IDE发现B类源代码中所使用的A类实例的setter和getter方法在A类源代码中找不到定义,IDE会认为这是错误
要解决以上这个不是真正错误的错误,可以下载安装Intellij Idea中的"Lombok plugin"。

六、lombok的罪恶
使用lombok虽然能够省去手动创建setter和getter方法的麻烦,但是却大大降低了源代码文件的可读性和完整性,降低了阅读源代码的舒适度。

参考文献:
[1]http://stackoverflow.com/questions/6107197/how-does-lombok-work
[2]https://projectlombok.org/download.html
[3]http://stackoverflow.com/questions/3061654/what-is-the-difference-between-javac-and-the-eclipse-compiler
[4]http://www.ibm.com/developerworks/library/j-lombok/
[5]http://notatube.blogspot.com/2010/12/project-lombok-creating-custom.html

SpringCloud工作笔记065---lombok的使用和原理_在开发工具STS_eclipse_Idea中集成lombok相关推荐

  1. SpringCloud工作笔记038---spring cloud-简单网关权限控制_直接在zuul里面做

    JAVA技术交流QQ群:170933152 这样也是一种方式吧,比较Low的一种吧,应该是, 在网关里,判断,是否有token,当然不能拦截登录啊,登录的时候本来就没有token, 登录以后,判断如果 ...

  2. SpringCloud工作笔记042---SpringCloud RestFul接口中跨域问题_这个解决方式不太完美,每个接口上都要加

    JAVA技术交流QQ群:170933152 下面是找的,我们在springcloud项目中,使用: Restful接口,有些put类型,delete类型的接口,是有跨域问题,访问不到的,这个时候 需要 ...

  3. SpringCloud工作笔记038---spring cloud微服务权限认证_终于确定下来大体的思想了

    JAVA技术交流QQ群:170933152 智慧城市: 现在权限这块,这样做: 微服务架构: 网关微服务:sc-gateway 认证微服务:sc-auth 权限微服务:sc-permission 思想 ...

  4. eclipse lombok插件安装_便捷开发,解放双手,lombok插件

    lombok是一款Java实用工具,可用来帮助开发人员消除Java的冗长,尤其是对于简单的Java对象(POJO). 在实际开发中,是不是发现经常需要变更model类.vo类.dto等一些实体类,随便 ...

  5. lombok有参构造注解_Java高效开发工具: Lombok

    Lombok, 一个Java开发必备效率工具,可以大大避免编写一些常用方法(get/set, hashcode等),简化开发.虽然现在IDE很多都可以通过快捷键生成POJO的一些方法了,但是如果该PO ...

  6. OAuth2.0_JWT令牌介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记147

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 这个JWT,已经在使用了,在我们的springcloud项目中,这里仅仅说一下就可以了. 可以看到 ...

  7. 基于Spring Security的认证授权_认证原理_授权流程_Spring Security OAuth2.0认证授权---springcloud工作笔记126

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后我们再来看springsecurity的授权流程. 可以看到,这个认证的过程,之前我们都已经用 ...

  8. 基于Spring Security的认证方式_Spring Security 的结构总览_Spring Security OAuth2.0认证授权---springcloud工作笔记122

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后我们说一下springsecurity的工作原理,也很简单. 首先可以看到之前我们用servl ...

  9. 认证授权介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记109

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 我们这里会说, 第三方认证授权,以及单体应用的授权,以及 springcloud分布式微服务的分布 ...

最新文章

  1. java综合面试题_综合性18道面试官必问经典Java面试题!
  2. python五子棋双人对弈_PyQt5实现五子棋游戏(人机对弈)
  3. 牛客一 G-Game of Swapping Numbers
  4. centos6实现kvm嵌套虚拟化
  5. 对于高并发的理解及实践方案
  6. DataList分页技术-- PagedDataSource类实现DataList和Repeater的分页效果
  7. 小程序秒杀活动服务器,微信小程序官方上线张大仙周年活动,人数太多把服务器弄崩溃了...
  8. ggplot2 | 统计变换的初步理解
  9. centos7.5 安装apidoc全过程实测
  10. 运用Links方法安装插件
  11. 深度学习 | 《深度学习》“花书”知识点笔记
  12. Java ques:Client does not support authentication protocol requested by server;Access denied user‘roo
  13. macbook电脑如何通过ssh连接群晖nas?
  14. nextjs 基于 isomorphic-unfetch 封装自己的请求库
  15. 【有利可图网】PS实战系列:制作树林与文字结合的创意文字效果
  16. 千兆级LTE的一小步,5G之路的一大步
  17. beats耳机红白交替闪烁三次_beats耳机红白灯交替闪如何解决
  18. AXURE建设团队项目原型
  19. Ubuntu查看crontab运行日志 及解决命令行好用 执行不好使的问题
  20. 【HEC-RAS】入门基础案例练习-一维稳定流水面线计算

热门文章

  1. Spring不使用XML的注解开发
  2. Redis安装+启动报错
  3. 牵引力教育推荐最先进的5大敏捷PHP开发框架
  4. 阿里RDS开发专家解析MySQL各版本并行复制
  5. UITableView使用总结和性能优化
  6. Eclipse/MyEclipse注释模板和格式化模板的使用
  7. Sql Server 列转行 Pivot使用
  8. ECCV2018_Generalizing A Person Retrieval Model Hetero- and Homogeneously
  9. 如何需求分析和编写测试用例
  10. Linux 下五个顶级的开源命令行 Shell