<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          我發(fā)現(xiàn) Lombok的幾個騷操作,哈哈好用

          共 6508字,需瀏覽 14分鐘

           ·

          2024-04-30 09:24

          大家好,我是小富~


          前言

          本文不討論對錯,只講騷操作。
          有的方法看看就好,知道可以這么用,但是否應(yīng)用到實際開發(fā)中,那就仁者見仁,智者見智了。
          一萬個讀者就會有一萬個哈姆雷特,希望這篇文章能夠給您帶來一些思考。
          耐心看完,你一定會有所收獲。

          @onX

          例如 onConstructoroMethod, 和 onParam 允許你在生成的代碼中注入自定義的注解。一個常見的用例是結(jié)合 Spring 的 @Autowired
          在 Spring 的組件(如 @Service、@Controller@Component、@Repository 等)中使用 @RequiredArgsConstructor(onConstructor = @__(@Autowired)),可以讓 Lombok 在生成構(gòu)造函數(shù)時也加上 @Autowired 注解,這樣,Spring 就可以自動注入所需的依賴。

          例如下面這段代碼
             
          @Service
          @RequiredArgsConstructor(onConstructor = @__(@Autowired))
          public class MyService {
              private final AnotherService anotherService;
          }
          上述代碼片段使用 Lombok 和 Spring 注解,Lombok 會為其生成以下代碼
             
          @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 會自動查找合適的 AnotherService bean 實例并注入到 MyService 中。
          這種方式結(jié)合了 Lombok 的自動代碼生成功能和 Spring 的依賴注入功能,使得代碼更為簡潔。
          但是,使用此技巧時要確保團(tuán)隊成員都理解其背后的含義,以避免混淆。

          @Delegate

          @Delegate可以讓你的類使用其他類的方法,而不需要自己寫代碼。
          比如,你有一個類叫做A,它有一個方法叫做sayHello(),你想讓另一個類B也能用這個方法,那就可以在B類中加上一個A類型的字段,并在這個字段上加上@Delegate注解,這樣,B類就可以直接調(diào)用sayHello()方法,就像它是自己的方法一樣??磦€例子:
             
          // 一個類,有一個方法
          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類的方法
              }
          }
          這樣寫最大的好處就是可以避免類的層次過深或者耦合過緊,提高代碼的可讀性和可維護(hù)性,各種繼承來繼承去是真的看得頭疼。

          @Cleanup

          @Cleanup可以自動管理輸入輸出流等各種需要釋放的資源,確保安全地調(diào)用close方法。
          它的使用方法是在聲明的資源前加上@Cleanup,例如:
             
          @Cleanup InputStream in = new FileInputStream("some/file");
          這樣,當(dāng)你的代碼執(zhí)行完畢后,Lombok會自動在一個try-finally塊中調(diào)用in.close()方法,釋放資源。
          如果要釋放資源的方法名不是close,也可以指定要調(diào)用的方法名,例如:
             
          @Cleanup("release") MyResource resource = new MyResource();
          Lombok會自動在try-finally塊中調(diào)用resource.release()方法,釋放資源。
          可以看到,這比手動寫try-finally要簡潔得太多了,只要使用@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

          允許你創(chuàng)建一個新的對象,該對象是當(dāng)前對象的副本,但某些字段的值已被更改。
             
          @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é)尾

          請注意,盡管 Lombok 提供了許多方便的功能,但過度使用不當(dāng)使用可能會導(dǎo)致代碼難以理解和維護(hù)。
          因此,在使用這些功能時,務(wù)必始終保持審慎,并且要充分考慮其影響。
          分庫分表系列往期推薦:





          1、好好的系統(tǒng),為什么要分庫分表?


          2、分庫分表的 21 條法則,hold ??!


          3、SpringBoot 2 種方式快速實現(xiàn)分庫分表,輕松拿捏!


          4、分庫分表如何管理不同實例中幾萬張分片表?


          5、一口氣搞懂分庫分表 12 種分片算法,大廠都在用

          我是小富~ 下期見!

          ··········  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。

          瀏覽 98
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  色九| 日比视频在线观看 | 国产精品videossex交 | 亚洲欧美精品suv | 成人A片一级 |