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中@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 }
参考:
声明:此博客为个人学习之用,如与其他作品雷同,纯属巧合,转载请指明出处!

浙公网安备 33010602011771号