zhihuifan

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

Lombok是一个在Java开发过程中为了简化冗余和样板式代码而出现的插件,下面是lombok的简单使用案例

(说明:使用lombok之前,必须保证编辑器安装了lombok插件,如果没有请自行安装)

 

注解类型的简单介绍:

类型解释
val,var 神奇的类型推到,可以代表任意类型
@Getter and @Setter  
@ToString  
@EqualsAndHashCode  
@NonNull  
@AllArgsConstructor、@RequiredArgsConstructor、@NoArgsConstructor 构造函数部分,针对不同情况的构造函数
@Data 相当于 @Getter + @Setter + @ToString + @EqualsAndHashCode + RequiredArgsConstructor
@Value 类变成只读模式
@Builder builder 模式,会创建内 Builder
@Singular 要配合 builder 使用,会对(List、Set)等生成更方便函数
@Cleanup 告别烦人的释放的资源
@Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j
@CommonsLog, @JBossLog, @Flogger
不同框架的日志注解
@SneakyThrows 偷偷摸摸地抛出异常
@Delegate 带实验性质的,能非常方便实现代理模式
@Accessors 带实验性质的存取器
@Wither 带实验性质的,根据被修饰的成员变量创建类

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 一,Lombok的@Log和@Slf4j

我们在java开发时经常需要打印日志,一般用法都是

需要加private  final Logger logger = LoggerFactory.getLogger(XXX.class); ,然后通过logger变量去使用logger.info,logger.debug.....,其实我们可以使用@Slf4j注解就很简单了,不用每次去加这么一段,下面就来介绍一下如何使用@Slf4j注解。

 

1.导入依赖

1 <dependency>    
2 
3 <groupId>org.projectlombok</groupId>    
4 
5 <artifactId>lombok</artifactId>
6 
7 </dependency>

2.在类或者方法上添加@Log 或 @Slf4j 注解,之后直接使用log. 方法就可以,如图所示:

 

 二,Lombok的@Data注解和@Getter/@Setter

1.@Data注解

例如开发中经常需要写的javabean,都需要花时间去添加相应的getter/setter,也许还要去写构造器、equals等方法,而且需要维护,当属性多时会出现大量的getter/setter方法,这些显得很冗长也没有太多技术含量,一旦修改属性,就容易出现忘记修改对应方法的失误,而lombok的出现就是为了解决代码书写冗余的问题。如下:

未使用lombok前:

 1 package cc.mrbird.febs.system.entity;
 2 
 3 import com.baomidou.mybatisplus.annotation.TableName;
 4 import lombok.Data;
 5 
 6 import java.io.Serializable;
 7 
 8 /**
 9  * @author MrBird
10  */ 
11 @TableName("t_test")
12 public class Test implements Serializable {
13 
14     private static final long serialVersionUID = -2510534697977648681L;
15     private String name;
16     private int age;
17 
18     public String getName() {
19         return name;
20     }
21 
22     public void setName(String name) {
23         this.name = name;
24     }
25 
26     public int getAge() {
27         return age;
28     }
29 
30     public void setAge(int age) {
31         this.age = age;
32     }
33 }

使用后: 

 1 package cc.mrbird.febs.system.entity;
 2 
 3 import com.baomidou.mybatisplus.annotation.TableName;
 4 import lombok.Data;
 5 
 6 import java.io.Serializable;
 7 
 8 /**
 9  * @author MrBird
10  */
11 @Data
12 @TableName("t_test")
13 public class Test implements Serializable {
14 
15     private static final long serialVersionUID = -2510534697977648681L;
16     private String name;
17     private int age;
18 
19 }

可以看出来使用lombok@Data注解,可以省略Get,Set 还有ToString方法等等的实现代码块,简化我们的代码

(其它说明:@Data注解在类上,会为类的所有属性自动生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。) 

 

2. Lombok的@Getter/@Setter注解:

如果觉得@Data太过残暴(因为@Data集合了@ToString、@EqualsAndHashCode、@Getter/@Setter、@RequiredArgsConstructor的所有特性)不够精细,可以使用@Getter/@Setter注解,此注解在属性上,可以为相应的属性自动生成Getter/Setter方法,示例如下: 

使用前

 1 public class GetterSetterExample {
 2 
 3   private int age = 10;
 4 
 5   private String name;
 6   
 7   @Override public String toString() {
 8     return String.format("%s (age: %d)", name, age);
 9   }
10   
11   public int getAge() {
12     return age;
13   }
14   
15   public void setAge(int age) {
16     this.age = age;
17   }
18   
19   protected void setName(String name) {
20     this.name = name;
21   }
22 }

使用后

 1 import lombok.AccessLevel;
 2 import lombok.Getter;
 3 import lombok.Setter;
 4 
 5 public class GetterSetterExample {
 6 
 7   @Getter @Setter private int age = 10;
 8   
 9   @Setter(AccessLevel.PROTECTED) private String name;
10   
11   @Override public String toString() {
12     return String.format("%s (age: %d)", name, age);
13   }
14 }

 

三,Lombok中val 关键字使用(val 关键字可以让我们在定义一个变量时候不需要提前指定它的类型) 如下图:

四,Lombok中@NonNull注解,该注解用在属性或构造器上,Lombok会生成一个非空的声明,可用于校验参数,能帮助避免空指针。

示例如下:

使用前

 1 import lombok.NonNull;
 2 
 3 public class NonNullExample extends Something {
 4   private String name;
 5   
 6   public NonNullExample(@NonNull Person person) {
 7     super("Hello");
 8     if (person == null) {
 9       throw new NullPointerException("person");
10     }
11     this.name = person.getName();
12   }
13 }

 

使用后

 1 import lombok.NonNull;
 2 
 3 public class NonNullExample extends Something {
 4   private String name;
 5   
 6   public NonNullExample(@NonNull Person person) {
 7     super("Hello");
 8     this.name = person.getName();
 9   }
10 }

 

 


参考:
https://www.jianshu.com/p/e7413d6af73f 
https://www.cnblogs.com/heyonggang/p/8638374.html
https://www.hellojava.com/a/74973.html
 
 
 

 声明:此博客为个人学习之用,如与其他作品雷同,纯属巧合,转载请指明出处!

 

posted on 2019-08-09 09:39  Hi,ZHF  阅读(502)  评论(0)    收藏  举报