Lombok介紹--簡化開發

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.引入依賴

maven-lombok的各個版本

<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(".....");
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章