久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

SpringBoot 優(yōu)雅編碼之:Lombok 加持

 dxw555 2018-04-13



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



概述


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



IntelliJ IDEA上配置


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


  • 首先進(jìn)入Plugins界面:



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



  • 最后不要忘了開啟Annotation Processors的Enable選項(xiàng):



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



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


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


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

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



  • 重啟idea即可



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




Lombok 主要注解


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

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

  • @EqualsAndHashCode / 為對象字段自動生成hashCode和equals實(shí)現(xiàn)

  • @AllArgsConstructor, @RequiredArgsConstructor and @NoArgsConstructor / 顧名思義,,為類自動生成對應(yīng)參數(shù)的constructor

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

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

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

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


下文就Lombok中用的最為頻繁的@Data和@Log注解進(jìn)行代碼實(shí)戰(zhàn),!



@Data 注解使用


官網(wǎng)關(guān)于@Data注解的解釋如下:


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


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


  • 先來創(chuàng)建一個POJO實(shí)體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的注解會自動補(bǔ)全,如下圖所示:



  • 我們來寫POJO的測試代碼



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



  • 結(jié)果打印


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




@Log 注解實(shí)戰(zhàn)


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



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



怎么樣,是不是一切都是那么地優(yōu)雅,!


活動福利


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


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





    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多