久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    SpringBoot 優雅編碼之:Lombok 加持

     dxw555 2018-04-13



    摘要: Lombok 通過提供簡單的語法注解形式來幫助簡化消除一些必須有但顯得很臃腫的 java 代碼。典型的是對于 POJO對象的簡化(如自動幫我們生成Setter和Getter等),有了Lombok的加持,開發人員可以免去很多重復且臃腫的操作,**極大地提高java代碼的信噪比**,因此我們必須嘗試并應用起來



    概述


    Lombok 通過提供簡單的語法注解形式來幫助簡化消除一些必須有但顯得很臃腫的 java 代碼。典型的是對于 POJO對象的簡化(如自動幫我們生成Setter和Getter等),有了Lombok的加持,開發人員可以免去很多重復且臃腫的操作,極大地提高java代碼的信噪比,因此我們必須嘗試并應用起來!



    IntelliJ IDEA上配置


    方法一:直接在IDEA界面中配置


    • 首先進入Plugins界面:



    • 然后搜索并安裝Lombok插件:



    • 最后不要忘了開啟Annotation Processors的Enable選項:



    上述安裝完成以后需要重啟IDEA生效!



    方法二:手動下載Lombok插件安裝


    有時由于網絡原因,上面方法一這種方式安裝失敗,因此只能手動下載安裝


    • 下載lombok插件: https://github.com/mplushnikov/lombok-intellij-plugin/releases

    • Plugins -> Install plugin from disk... 選擇下載的zip包安裝



    • 重啟idea即可



    IDE中設置完成以后需要在pom.xml中添加如下所示的lombok依賴才能使用




    Lombok 主要注解


    • @Getter and @Setter / 自動為屬性提供 Set和Get 方法

    • @ToString / 該注解的作用是為類自動生成toString()方法

    • @EqualsAndHashCode / 為對象字段自動生成hashCode和equals實現

    • @AllArgsConstructor, @RequiredArgsConstructor and @NoArgsConstructor / 顧名思義,為類自動生成對應參數的constructor

    • @Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j, @CommonsLog, @JBossLog / 自動為類添加對應的log支持

    • @Data / 自動為所有字段添加@ToString, @EqualsAndHashCode, @Getter,為非final字段添加@Setter,和@RequiredArgsConstructor,本質上相當于幾個注解的綜合效果

    • @NonNull / 自動幫助我們避免空指針。作用在方法參數上的注解,用于自動生成空值參數檢查

    • @Cleanup / 自動幫我們調用close()方法。作用在局部變量上,在作用域結束時會自動調用close方法釋放資源


    下文就Lombok中用的最為頻繁的@Data和@Log注解進行代碼實戰!



    @Data 注解使用


    官網關于@Data注解的解釋如下:


    All together now: A shortcut for @ToString, @EqualsAndHashCode, @Getter on all fields, @Setter on all non-final fields, and @RequiredArgsConstructor!


    不難理解,其可以看成是多個Lombok注解的集成,因此使用很方便!


    • 先來創建一個POJO實體UserLombok,普通的寫法如下:


    public class UserLombok {

      private final String name;

      private int age;

      private double score;

      private String[] tags;

      

      public UserLombok(String name) {

        this.name = name;

      }

      

      public String getName() {

        return this.name;

      }

      

      void setAge(int age) {

        this.age = age;

      }

      

      public int getAge() {

        return this.age;

      }

      

      public void setScore(double score) {

        this.score = score;

      }

      

      public double getScore() {

        return this.score;

      }

      

      public String[] getTags() {

        return this.tags;

      }

      

      public void setTags(String[] tags) {

        this.tags = tags;

      }

      

      @Override public String toString() {

        return 'DataExample(' this.getName() ', ' this.getAge() ', ' this.getScore() ', ' Arrays.deepToString(this.getTags()) “)”;

      }

      

      protected boolean canEqual(Object other) {

        return other instanceof DataExample;

      }

      

      @Override public boolean equals(Object o) {

        if (o == this) return true;

        if (!(o instanceof DataExample)) return false;

        DataExample other = (DataExample) o;

        if (!other.canEqual((Object)this)) return false;

        if (this.getName() == null ? other.getName() != null : !this.getName().equals(other.getName())) return false;

        if (this.getAge() != other.getAge()) return false;

        if (Double.compare(this.getScore(), other.getScore()) != 0) return false;

        if (!Arrays.deepEquals(this.getTags(), other.getTags())) return false;

        return true;

      }

      

      @Override public int hashCode() {

        final int PRIME = 59;

        int result = 1;

        final long temp1 = Double.doubleToLongBits(this.getScore());

        result = (result*PRIME) (this.getName() == null ? 43 : this.getName().hashCode());

        result = (result*PRIME) this.getAge();

        result = (result*PRIME) (int)(temp1 ^ (temp1 >>> 32));

        result = (result*PRIME) Arrays.deepHashCode(this.getTags());

        return result;

      }

    }


    • Lombok加持后,寫法可簡化為:



    在IDEA中使用時,Lombok的注解會自動補全,如下圖所示:



    • 我們來寫POJO的測試代碼



    由下圖我們可以看到IDEA依然可以自動為我們補全由Lombok自動生成的代碼:



    • 結果打印


    由于Lombok為我們自動生成了toString方法,因此對象的打印結果如下:




    @Log 注解實戰


    在我的文章 Spring Boot日志框架實踐 一文中,我們使用Log4j2來作為日志對象,其寫法如下:



    若改用Lombok后,寫法變得更加簡潔,我們只需要引入對應的@Log注解即可完成log對象的生成:



    怎么樣,是不是一切都是那么地優雅!


    活動福利


    4月12日-4月15日,參與我們的問卷調查【“提需求”贏福利,程序員的需求是什么樣的?】,并在文末留言您對開源中國公眾號的意見或建議


    我們將在活動結束后,抽選數名幸運用戶送出精美技術圖書一本(圖片僅供參考,書籍隨機贈送)





      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 人成午夜免费大片| 最新无码国产在线视频人与| V一区无码内射国产| 久久久国产精品VA麻豆| 欧美日韩精品一区二区三区高清视频 | 国产娱乐凹凸视觉盛宴在线视频 | 国产一区二区在线影院| 久久久久香蕉国产线看观看伊| 成人看的污污超级黄网站免费| 欧美亚洲国产一区二区三区| 高清中文字幕国产精品| 亚洲一区二区三区无码中文字幕 | 性饥渴少妇AV无码毛片| 国产精品中文字幕自拍| 亚洲色欲色欲WWW在线丝| 深夜福利资源在线观看| 免费人成黄页在线观看国产| 中文字幕国产精品av| 日韩免费无码一区二区三区| 日韩精品中文字幕有码| 97无码人妻福利免费公开在线视频 | 人妻精品动漫H无码中字| 亚洲一区二区三区无码中文字幕 | 午夜大片免费男女爽爽影院| 久久WWW免费人成一看片| 狠狠亚洲色一日本高清色| 奇米网777色在线精品| 1000部拍拍拍18勿入免费视频| 福利一区二区在线播放| 中文字幕无码免费久久| 午夜成年男人免费网站| 色一情一乱一伦麻豆| 色婷婷久久综合中文久久一本| 欧美肥老太牲交大战| 日韩av片无码一区二区不卡| 国产欧美日韩VA另类在线播放 | 久久精品无码一区二区小草| 亚洲欧美日韩在线码| 无码日韩精品一区二区三区免费| 超碰人人超碰人人| 四虎影视一区二区精品|