目錄html
java開發者應該都有這樣的一種經歷,定義完JavaBean後,須要生成其對於的構造函數、getter、setter、equals、hashCode、toString等方法,雖然能夠經過IDE去生成,可是仍是會有修改變量名或類型後須要修改上面提到的方法、代碼冗餘等問題。
lombok就是爲解決上面問題的工具,真是遺憾爲啥如今才發現這個工具。下面就把學習的過程記錄下。java
Lombok是一個能夠經過簡單的註解形式來幫助咱們簡化消除一些必須有但顯得很臃腫的Java代碼的工具,經過使用對應的註解,能夠在編譯源碼的時候生成對應的方法。web
這裏只記錄在idea上安裝的操做,之後在eclipse上安裝時,在補充。eclipse
打開IDEA的Setting –> 選擇Plugins選項 –> 選擇Browse repositories –> 搜索lombok –> 點擊安裝 –> 安裝完成重啓IDEA –> 安裝成功
安裝後須要重啓idea才能生效。maven
maven用戶能夠直接添加:(具體版本可查看maven倉庫:http://mvnrepository.com/)ide
<dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.2</version> </dependency> </dependencies>
lombok的註釋有:@Getter、@Setter、@NonNull、@ToString、@EqualsAndHashCode、@Data、@Cleanup、@Synchronized、@SneakyThrows、@Slf4j。下面咱們就來一一介紹:函數
可註解到類或字段上,會爲指定字段或類的全部字段生成對應的Getter和Setter方法,默認方法都public類型的,也可修改方法的訪問級別。工具
可看到各個字段根據對應的註釋自動生成了對應的Getter和Setter方法,birthDay字段的Getter方法設置爲了protected。
學習
在類上設置則該類的全部的字段均可生成對應的Getter和Setter方法。
ui
使用在字段或方法上,用於判斷在使用字段時,如果該字段爲null,則會拋出NullPointerException。
狀況1:註解字段後,該這段的setter方法(對getter方法沒有影響),如果設置的值爲null,則會拋出NullPointerException。
狀況2:還能使用在方法的參數字段上,做用是在使用該方法時,會先檢查被@NonNull的字段傳遞的值是否爲null,如果就拋出NullPointerException。
註釋在類上,表示自動生成物參數的構造方法
註釋在類上,表示自動生成toString()方法;還能根據相關參數,實現其餘功能,好比:打印父類的字段。
註釋在類上,表示equals和hashCode方法。
如果需求挺多,那豈不是註解也胡不少嗎?@Data能夠解決這個問題。
註釋在類上,至關於@ToString, @EqualsAndHashCode, @Getter and @Setter。
該@Cleanup註釋能夠用來保證分配的資源被釋放。當使用帶註釋的局部變量時@Cleanup,任何後續代碼都包含在一個 try/finally塊中,該塊保證在當前做用域的末尾調用cleanup方法。默認狀況下,@Cleanup 假設清理方法命名爲「close」,與輸入和輸出流同樣。可是,能夠爲註釋的value參數提供不一樣的方法名稱。只有不帶參數的清理方法才能與此註釋一塊兒使用。
使用@Cleanup註釋時還須要注意一點。若是清理方法拋出異常,它將搶佔方法體中引起的任何異常。這可能致使問題的實際緣由被掩蓋,而且在選擇使用Project Lombok的資源管理時應該考慮到這一點。此外,隨着Java 7中的自動資源管理,這個特定的註釋可能相對短暫。
Lombok註釋代碼:
public void testCleanUp() { try { @Cleanup ByteArrayOutputStream baos = new ByteArrayOutputStream(); baos.write(new byte[] {'Y','e','s'}); System.out.println(baos.toString()); } catch (IOException e) { e.printStackTrace(); } }
至關於:
public void testCleanUp() { try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { baos.write(new byte[]{'Y', 'e', 's'}); System.out.println(baos.toString()); } finally { baos.close(); } } catch (IOException e) { e.printStackTrace(); } }
使用註釋實例方法@Synchronized將提示Lombok生成一個名爲的私有鎖定字段$lock,該方法將在執行以前鎖定。相似地,以相同的方式註釋靜態方法將生成爲$LOCK靜態方法命名的私有靜態對象 ,以相同的方式使用。能夠經過爲註釋的value參數提供字段名稱來指定不一樣的鎖定對象。提供字段名稱時,開發人員必須定義屬性,由於Lombok不會生成它。
Lombok註釋代碼:
private DateFormat format = new SimpleDateFormat(「MM-dd-YYYY」); @Synchronized public String synchronizedFormat(Date date){ return format.format(date); }
等效的Java源代碼:
private final java.lang.Object $ lock = new java.lang.Object [0]; private DateFormat format = new SimpleDateFormat(「MM-dd-YYYY」); public String synchronizedFormat(Date date){ synchronized($ lock){ return format.format(date); } }
註釋於方法上,用於隱藏式的Throws的Exception。
Lombok註釋代碼:
@SneakyThrows public void testSneakyThrows(){ throw new IllegalAccessException(); }
等效於:
public void testSneakyThrows(){ try { throw new IllegalAccessException(); } catch(java.lang.Throwable $ ex){ throw lombok.Lombok.sneakyThrow($ ex); } }
註釋在類上,避免每次在使用日誌的時候,須要手動在該類中定義:
private final Logger logger = LoggerFactory.getLogger(XXX.class);
http://jnb.ociweb.com/jnb/jnbJan2010.html