我發(fā)現(xiàn) Lombok的幾個騷操作,哈哈好用
共 6508字,需瀏覽 14分鐘
·
2024-04-30 09:24
大家好,我是小富~
前言
@onX
onConstructor, oMethod, 和 onParam 允許你在生成的代碼中注入自定義的注解。一個常見的用例是結(jié)合 Spring 的 @Autowired。
@Service、@Controller、@Component、@Repository 等)中使用 @RequiredArgsConstructor(onConstructor = @__(@Autowired)),可以讓 Lombok 在生成構(gòu)造函數(shù)時也加上 @Autowired 注解,這樣,Spring 就可以自動注入所需的依賴。
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class MyService {
private final AnotherService anotherService;
}
@Service
public class MyService {
private final AnotherService anotherService;
@Autowired
public MyService(AnotherService anotherService) {
this.anotherService = anotherService;
}
}
-
為 MyService生成了一個構(gòu)造函數(shù),該構(gòu)造函數(shù)接受一個AnotherService類型的參數(shù)。 -
由于構(gòu)造函數(shù)上有 @Autowired注解,Spring 會自動查找合適的AnotherServicebean 實例并注入到MyService中。
@Delegate
@Delegate可以讓你的類使用其他類的方法,而不需要自己寫代碼。
// 一個類,有一個方法
public class A {
public void sayHello() {
System.out.println("Hello");
}
}
// 一個類,委托了A類的方法
public class B {
@Delegate // 委托A類的方法
private A a = new A();
public static void main(String[] args) {
B b = new B();
b.sayHello(); // 調(diào)用A類的方法
}
}
@Cleanup
@Cleanup可以自動管理輸入輸出流等各種需要釋放的資源,確保安全地調(diào)用close方法。
@Cleanup,例如:
@Cleanup InputStream in = new FileInputStream("some/file");
in.close()方法,釋放資源。
@Cleanup("release") MyResource resource = new MyResource();
resource.release()方法,釋放資源。
@Cleanup就能管理任何有無參方法的資源,指定正確的方法名即可。
@Singular 和 @Builder 組合
@Builder讓你的類支持鏈?zhǔn)綐?gòu)造,而@Singular讓集合類型字段可以更方便的維護(hù)。
@Singular注解可以用在集合類型的字段上,它會生成兩個方法,一個是添加單個元素的方法,一個是添加整個集合的方法。這兩個方法可以和 @Builder 生成的其他方法一起鏈?zhǔn)秸{(diào)用,給你的類的所有字段賦值。
@Data
@Builder
public class User {
private String name;
private int age;
@Singular
private List<String> hobbies;
}
// 使用 @Builder 和 @Singular 生成的方法
User user = User.builder()
.name("練習(xí)時長兩年半")
.age(28)
.hobby("籃球") // 添加單個元素
.hobby("唱歌") // 添加單個元素
.hobbies(Arrays.asList("跳舞", "其他")) // 添加整個集合
.build(); // 構(gòu)造 User 對象
@Singular 注解的好處是,你可以靈活地添加集合類型的字段,而不需要自己創(chuàng)建和初始化集合對象。
@Singular 注解生成的集合字段,在調(diào)用 build() 方法后,會被轉(zhuǎn)換為不可變的集合,這樣可以保證對象的不變性和線程安全性。你也可以使用 clear() 方法來清空集合字段,例如:
User user = User.builder()
.name("簽")
.age(28)
.hobby("說唱")
.hobby("跳舞")
.clearHobbies() // 清空集合字段
.hobby("踩縫紉機(jī)") // 重新添加元素
.build();
@Builder 只會生成當(dāng)前類的字段和參數(shù),不包括父類的。
@With
@With
public class Person {
private String name;
private int age;
}
Person person = new Person("Alice", 30);
// 創(chuàng)建一個新的 Person 對象,其 name 為 "Alice",但 age 為 31
Person updatedPerson = person.withAge(31);
結(jié)尾
我是小富~ 下期見!
·········· END ··············
在看、點贊、轉(zhuǎn)發(fā),是對我最大的鼓勵。
《ShardingSphere5.x分庫分表原理與實戰(zhàn)》PDF公眾號內(nèi)回復(fù)[ 分庫分表 ] Get。
技術(shù)書籍公眾號內(nèi)回復(fù)[ pdf ] Get。
面試筆記、springcloud進(jìn)階實戰(zhàn)PDF,公眾號內(nèi)回復(fù)[ 1222 ] Get。
評論
圖片
表情
