1. 程式人生 > >從今天起讓我們忘記Java中的get/set方法吧!

從今天起讓我們忘記Java中的get/set方法吧!

開發十年,就只剩下這套架構體系了! >>>   

曾幾何時,我們寫程式碼的時候,每次寫Bean的時候都會使用快捷鍵生成get/set方法,有時候我經常會想,既然每一個Bean我們都會給其提供get/set方法,那麼為什麼還有會這個東西哪?(當然這只是一個問題,畢竟還是很有用的,這一點就是Java語言中的private、public等作用域)

今天說的當然不是這個,我們討論的是希望有一種優雅的方式編寫我們的get/set方法或者說是一種優雅的簡化。那我們就說一下今天的主角吧!

Lombok

如果想學習Java工程化、高效能及分散式、深入淺出。微服務、Spring,MyBatis,Netty原始碼分析的朋友可以加我的Java高階交流:854630135,群裡有阿里大牛直播講解技術,以及Java大型網際網路技術的視訊免費分享給大家。

Java程式碼簡化神器!就是如此美妙!

Lombok是一個可以通過簡單的註解形式來幫助我們簡化消除一些必須有但顯得很臃腫的Java程式碼的工具,通過使用對應的註解,可以在編譯原始碼的時候生成對應的方法。

https://projectlombok.org/

https://github.com/rzwitserloot/lombok

如何使用

1、安裝IDEA外掛Lombok Plugin

從今天起讓我們忘記Java中的get/set方法吧!

 

 

2、引入pom,版本為1.16.18

從今天起讓我們忘記Java中的get/set方法吧!

 

 

3、簡單使用,設定get/set方法

從今天起讓我們忘記Java中的get/set方法吧!

 

 

4、稍微複雜一點的使用

從今天起讓我們忘記Java中的get/set方法吧!

 

 

其他使用

上述只是展示了幾個最常用的特性,其他的還有很多,例如:

@NonNull、 @java.lang.Override、@Data、@SneakyThrows、@Synchronized、@Cleanup

具體的使用可以參考官方文件,這裡只是給大家介紹一下如此美妙的東西!

Q:這麼好的東西,他是什麼原理哪?

A:首先我們應該清楚,我們第一步是需要安裝IDEA的外掛,只有安裝了外掛我們才可以在程式碼中直接使用get和set方法,如果沒有話他會直接報錯的,就是沒有get和set方法,安裝了外掛我們就可以使用這些方法,並且在編譯之後的class檔案中也是有這些方法的。當然,為什麼裝了外掛之後就可以呼叫了,這個問題太過深奧,這裡不再細聊,有興趣的可以參考相關文章進行學習。

一些思考

看到這裡,很多人要說了,我使用的要麼是SSM框架,要麼是SSH框架,這些框架都可以使用逆向工程的方式生成我們的程式碼,當然包括Bean,我們在使用逆向工程的時候,get/set方法不都是自動生成的嗎?使用這個Lombok儘管優美,我們還不是需要進行自己寫註解的嗎?

首先,我們先聊一下最近一個比較火的領域驅動設計中的貧血、失血、脹血和充血模型。

什麼是貧血失血充血模型呢?簡單來說:

1、失血模型:模型僅僅包含類的屬性和getter/setter方法,業務邏輯和應用邏輯都放到服務層中。這種類在Java中叫POJO或者Bean。

2、貧血模型:貧血模型中包含了一些業務邏輯,但不包含依賴持久層的業務邏輯。這部分依賴於持久層的業務邏輯將會放到服務層中。可以看出,貧血模型中的領域物件是不依賴於持久層的。

3、充血模型:充血模型中包含了所有的業務邏輯,包括依賴於持久層的業務邏輯。所以,使用充血模型的領域層是依賴於持久層,簡單表示就是 UI層->服務層->領域層<->持久層。

4、脹血模型:脹血模型就是把和業務邏輯不相關的其他應用邏輯(如授權、事務等)都放到領域模型中,這是一種極差的設計方式。

看到這裡,可能大家一臉迷茫!這樣說吧,領域驅動模型設計的一個特點是對於一個實體物件,它不但有相關的屬性還要有其自身的方法(他的能力,可以做的事情)。

舉個栗子:一個User類,不但要有人的基本屬性,還要有這個人能做的事情(不僅僅是get/set方法)但是,這一看就是一個充血模型,但是隻有基本的屬性和get/set方法的話他就是一個失血模型了,因此對於領域驅動來說,我們可以這樣操作,通過一個DTO包含其所有的基本屬性和get/set方法,然後領域實體物件繼承這個DTO,當然這只是一種用法!

 

從今天起讓我們忘記Java中的get/set方法吧!

 

如果想學習Java工程化、高效能及分散式、深入淺出。微服務、Spring,MyBatis,Netty原始碼分析的朋友可以加我的Java高階交流:854630135,群裡有阿里大牛直播講解技術,以及Java大型網際網路技術的視訊免費分享給大家。

圖:領域驅動的一種使用模式

因此對於一個充血模型的領域驅動實體物件來說,他不但有屬性還有他的各種方法,如果整個的都放在一個類裡的話根本不好區分他到底是get/set方法還是其他功能方法,這裡我們使用Lombok提供的註解的方式就刻意很完美的解決這個在編碼過程中造成的不適感!

當然,對於領域驅動模型的研究還有很多,這裡只是簡單的介紹了我使用過的一種方式,僅供參考!

回過頭來看

看到這裡,貌似饒了一大圈還是沒有說明白,我使用SSM好好的,然後程式碼都是自動生成的,我為什麼還需要使用和這個Lombok哪?

其實不然,上述在介紹領域驅動的時候,我們也可以看到使用Lombok確實可以簡化很多編輯器中顯示的程式碼,是一種很優雅和美觀的體現!

那我資料庫有100多個表,又沒法使用以前的逆向工具生成程式碼,我該怎麼辦哪?當然是造---造輪子了!

使用過MyBatis的朋友很多都知道,可以很方便的使用逆向工程生成我們需要的程式碼,我們如果引入Lombok的話,我們只有把他加入到逆向工程裡生成我們的程式碼才可以避免龐大的工作量。

估計有些小夥伴們已經方了,這麼高大上的東西自己怎麼可能搞定那?不用擔心,我個人曾經嘗試過使用簡單的程式碼實現類似的程式碼生成工具。當你去嘗試的時候,就會知道,也不過如此!過程大致是這樣的:

 

從今天起讓我們忘記Java中的get/set方法吧!

 

 

看一個簡單的FreeMarker的關於Bean的一個簡單模板配置,雖然看著複雜,但是都結構化的格式,使用模板配置我們不但可以生成Bean、還可以生成Service、Controller等任何我們需要的程式碼:

 

從今天起讓我們忘記Java中的get/set方法吧!

 

 

當然,我們也可以在開源專案的基礎上進行修改的,這樣的話更加容易一些!常見的有mybatis-plus提供的一個程式碼生成工具,可以參考!

從今天起讓我們忘記Java中的get/set方法吧!

 

好啦!今天給大家介紹了程式碼簡化神器Lombok,還有程式碼生成器的基本思路,有了Lombok!就讓我們忘了Java程式碼中冗長雜亂的get/set方法吧!

歡迎工作一到八年的Java工程師朋友們加入Java高階交流:854630135

本群提供免費的學習指導 架構資料 以及免費的解答

不懂得問題都可以在本群提出來 之後還會有直播平臺和