赞
踩
转自:https://blog.csdn.net/u011054333/article/details/54381850
https://blog.csdn.net/qq_39753982/article/details/80239826
lombok是一个可以通过简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 Java 代码的工具,比如我们新建了一个类,然后在其中写了几个字段,然后通常情况下我们需要手动去建立get和set方法啊,构造函数啊之类的,lombok的作用就是为了省去我们手动创建这些代码的麻烦,它能够在我们编译源码的时候自动帮我们生成这些方法。
虽然有人可能会说IDE里面都自带自动生成这些方法的功能,但是使用lombok会使你的代码看起来更加简洁,写起来也更加方便。
lombok的安装跟一般引用jar包没有什么区别,可以到官网上下载最新的jar包,然后导入到项目里面就好啦!
Maven添加依赖
- <dependencies>
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <version>1.16.10</version>
- </dependency>
- </dependencies>
Intellij idea开发的话需要安装Lombok plugin,同时设置 Setting -> Compiler -> Annotation Processors -> Enable annotation processing勾选。
lombok使用过程中主要是靠注解起作用的,官网上的文档里面有所有的注解,这里不一一罗列,只说明其中几个比较常用的。
@NonNull
: 可以帮助我们避免空指针。使用lombok:
- import lombok.NonNull;
- public class NonNullExample extends Something {
- private String name;
- public NonNullExample(@NonNull Person person) {
- super("Hello");
- this.name = person.getName();
- }
- }
不使用lombok:
- public class NonNullExample extends Something {
- private String name;
- public NonNullExample(@NonNull Person person) {
- super("Hello");
- if (person == null) {
- throw new NullPointerException("person");
- }
- this.name = person.getName();
- }
- }
@Cleanup
: 自动帮我们调用close()
方法。使用lombok:
- import lombok.Cleanup;
- import java.io.*;
- public class CleanupExample {
- public static void main(String[] args) throws IOException {
- @Cleanup InputStream in = new FileInputStream(args[0]);
- @Cleanup OutputStream out = new FileOutputStream(args[1]);
- byte[] b = new byte[10000];
- while (true) {
- int r = in.read(b);
- if (r == -1) break;
- out.write(b, 0, r);
- }
- }
- }
不使用lombok:
- import java.io.*;
- public class CleanupExample {
- public static void main(String[] args) throws IOException {
- InputStream in = new FileInputStream(args[0]);
- try {
- OutputStream out = new FileOutputStream(args[1]);
- try {
- byte[] b = new byte[10000];
- while (true) {
- int r = in.read(b);
- if (r == -1) break;
- out.write(b, 0, r);
- }
- } finally {
- if (out != null) {
- out.close();
- }
- }
- } finally {
- if (in != null) {
- in.close();
- }
- }
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
@Getter / @Setter
: 自动生成Getter/Setter方法使用lombok:
- import lombok.AccessLevel;
- import lombok.Getter;
- import lombok.Setter;
- public class GetterSetterExample {
- @Getter @Setter private int age = 10;
- @Setter(AccessLevel.PROTECTED) private String name;
- }
不使用lombok:
- public class GetterSetterExample {
- private int age = 10;
- private String name;
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- protected void setName(String name) {
- this.name = name;
- }
- }
@NoArgsConstructor
: 自动生成无参数构造函数。@AllArgsConstructor
: 自动生成全参数构造函数。@Data
: 自动为所有字段添加@ToString, @EqualsAndHashCode, @Getter方法,为非final字段添加@Setter,和@RequiredArgsConstructor!下面对Lombok的简单使用方法做一下总结:
常用的还有一个一些Log注解,Lombok已经对常用的日志都做了工作。这里直接引用官网的介绍:
@CommonsLog
Creates private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
@JBossLog
Creates private static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class);
@Log
Creates private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());
@Log4j
Creates private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);
@Log4j2
Creates private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
@Slf4j
Creates private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
@XSlf4j
Creates private static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);
说了这么多,我们来看看一个例子:
- package yitian.bean;
-
- import lombok.AllArgsConstructor;
- import lombok.Data;
- import lombok.NoArgsConstructor;
-
- import java.time.LocalDate;
-
- @Data
- @NoArgsConstructor
- @AllArgsConstructor
- public class User {
- private int id;
- private String username;
- private String password;
- private String nickname;
- private String address;
- private LocalDate birthday;
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
可以看到,由于应用了@Data注解和两个构造方法注解,代码变得非常短小易读。即使使用IDE自动生成这些代码,一般也会生成超过100行的代码。可见Lombok的方便之处。
最后再来说说Lombok的原理吧。虽然Lombok也用到了注解,但是它并没有用到反射,而是通过一些奇技淫巧,在代码编译时期动态将注解替换为具体的代码。所以JVM实际运行的代码,和我们手动编写的包含了各种工具方法的类相同。另外我仅仅对Lombok做了一些简单介绍,在其官网上还有一些其他注解,并给出了更详细的说明和生成前后的代码例子。有兴趣的同学可以看看。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。