1.Lombok是什麼?
lombok官方是這麼解釋的:Project Lombok是一個java庫,可以自動插入編輯器和構建工具,爲java增添趣味。永遠不要再編寫一個getter或equals方法,使用一個註釋,您的類就有了一個功能齊全的構建器,自動化了您的日誌變量,等等。
可以使用lombok的相關注解,讓我們不再顯示的的爲一個類編寫setter,getter,toString等方法,因爲這些方法除了變量名不同,並沒有其他不同。作爲工具的最終目標,lombok合理的使用可以簡化開發。
例如:
public class Test {
@Setter
@Getter
private Integer a;
}
等同於
public class Test {
private Integer a;
public Integer getA() {
return a;
}
public void setA(Integer a) {
this.a = a;
}
}
2.引入依賴
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.22</version>
<scope>provided</scope>
</dependency>
3.lombok常用註解
Lombok採用註解的方式,在編譯後會自動生成註解相對應的方法
常用註解:
1. @setter/@getter
作用在屬性,類
爲屬性提供set/get方法
2. @ToString
作用在類上
爲類自動生成toString()方法
3. @Data
作用在類上
會爲類的所有屬性自動生成setter/getter、equals、canEqual、hashCode、toString方法
4. @AllArgsConstructor
作用在類
爲類生成全參數的構造方法
5. @NoArgsConstructor
作用在類
爲類生成無參構造方法
6. @NonNull
作用在屬性,方法,方法參數,方法中的本地變量(局部變量)
會分別校驗屬性,方法的全部參數,方法參數,方法本地變量是否爲空
7. @Cleanup
作用在方法中的本地變量(局部變量)
作用在資源變量中,會自動調用其close方法關閉資源。
例如:
try {
@Cleanup
InputStream intput = new FileInputStream("file");
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
等同於
InputStream intput = null;
try {
intput = new FileInputStream("file");
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
intput.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
8. @Log4j
作用在類上
爲該類創建一個日誌記錄對象log,使用類org.apache.log4j.Logger
例如:
@Log4j
public class Test {
public static void main(String[] args) {
log.info("logger....");
}
}
9. @SneakyThrows
作用在方法,構造函數
暗中拋出異常,當我們需要拋出異常,在當前方法上調用,不用顯示的在方法名後面寫 throw
例如:
@SneakyThrows(value=NullPointerException.class)
public void test() {
throw new NullPointerException();
}
10. @RequiredArgsConstructor
作用在類上
爲類生成所有帶有final或者@Nonnull註解屬性的構造方法
例如:
@RequiredArgsConstructor
public class Test {
@NonNull
private int a;
final String B;
private int c;
}
等同於
public class Test {
@NonNull
private int a;
final String B;
private int c;
Test(int a,String B){
this.a = a;
this.B = B;
}
}
11. @Synchronized
作用在方法上
與synchronized作用一樣,默認靜態方法使用的是全局鎖,普通方法使用的是對象鎖,可以指定鎖的對象。
例如:
public class Test {
@Synchronized
public void test() {
System.out.println(".....");
}
}
等同於
public class Test {
public void test() {
synchronized (this) {
System.out.println(".....");
}
}
}