曾幾什麼時候,咱們寫代碼的時候,每次寫Bean的時候都會使用快捷鍵生成get/set方法,有時候我常常會想,既然每個Bean咱們都會給其提供get/set方法,那麼爲何還有會這個東西哪?(固然這只是一個問題,畢竟仍是頗有用的,這一點就是Java語言中的private、public等做用域)java
今天說的固然不是這個,咱們討論的是但願有一種優雅的方式編寫咱們的get/set方法或者說是一種優雅的簡化。那咱們就說一下今天的主角吧!git
Lombokgithub
若是想學習Java工程化、高性能及分佈式、深刻淺出。微服務、Spring,MyBatis,Netty源碼分析的朋友能夠加個人Java高級交流:854630135,羣裏有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給你們。數據庫
Java代碼簡化神器!就是如此美妙!mybatis
Lombok是一個能夠經過簡單的註解形式來幫助咱們簡化消除一些必須有但顯得很臃腫的Java代碼的工具,經過使用對應的註解,能夠在編譯源碼的時候生成對應的方法。架構
https://projectlombok.org/框架
https://github.com/rzwitserloot/lombok編輯器
如何使用分佈式
一、安裝IDEA插件Lombok Pluginide
二、引入pom,版本爲1.16.18
三、簡單使用,設置get/set方法
四、稍微複雜一點的使用
其餘使用
上述只是展現了幾個最經常使用的特性,其餘的還有不少,例如:
@NonNull、 @java.lang.Override、@Data、@SneakyThrows、@Synchronized、@Cleanup
具體的使用能夠參考官方文檔,這裏只是給你們介紹一下如此美妙的東西!
Q:這麼好的東西,他是什麼原理哪?
A:首先咱們應該清楚,咱們第一步是須要安裝IDEA的插件,只有安裝了插件咱們才能夠在代碼中直接使用get和set方法,若是沒有話他會直接報錯的,就是沒有get和set方法,安裝了插件咱們就可使用這些方法,而且在編譯以後的class文件中也是有這些方法的。固然,爲何裝了插件以後就能夠調用了,這個問題太過深奧,這裏再也不細聊,有興趣的能夠參考相關文章進行學習。
一些思考
看到這裏,不少人要說了,我使用的要麼是SSM框架,要麼是SSH框架,這些框架均可以使用逆向工程的方式生成咱們的代碼,固然包括Bean,咱們在使用逆向工程的時候,get/set方法不都是自動生成的嗎?使用這個Lombok儘管優美,咱們還不是須要進行本身寫註解的嗎?
首先,咱們先聊一下最近一個比較火的領域驅動設計中的貧血、失血、脹血和充血模型。
什麼是貧血失血充血模型呢?簡單來講:
一、失血模型:模型僅僅包含類的屬性和getter/setter方法,業務邏輯和應用邏輯都放到服務層中。這種類在Java中叫POJO或者Bean。
二、貧血模型:貧血模型中包含了一些業務邏輯,但不包含依賴持久層的業務邏輯。這部分依賴於持久層的業務邏輯將會放到服務層中。能夠看出,貧血模型中的領域對象是不依賴於持久層的。
三、充血模型:充血模型中包含了全部的業務邏輯,包括依賴於持久層的業務邏輯。因此,使用充血模型的領域層是依賴於持久層,簡單表示就是 UI層->服務層->領域層<->持久層。
四、脹血模型:脹血模型就是把和業務邏輯不相關的其餘應用邏輯(如受權、事務等)都放到領域模型中,這是一種極差的設計方式。
看到這裏,可能你們一臉迷茫!這樣說吧,領域驅動模型設計的一個特色是對於一個實體對象,它不但有相關的屬性還要有其自身的方法(他的能力,能夠作的事情)。
舉個栗子:一個User類,不但要有人的基本屬性,還要有這我的能作的事情(不只僅是get/set方法)可是,這一看就是一個充血模型,可是隻有基本的屬性和get/set方法的話他就是一個失血模型了,所以對於領域驅動來講,咱們能夠這樣操做,經過一個DTO包含其全部的基本屬性和get/set方法,而後領域實體對象繼承這個DTO,固然這只是一種用法!
若是想學習Java工程化、高性能及分佈式、深刻淺出。微服務、Spring,MyBatis,Netty源碼分析的朋友能夠加個人Java高級交流:854630135,羣裏有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給你們。
圖:領域驅動的一種使用模式
所以對於一個充血模型的領域驅動實體對象來講,他不但有屬性還有他的各類方法,若是整個的都放在一個類裏的話根本很差區分他究竟是get/set方法仍是其餘功能方法,這裏咱們使用Lombok提供的註解的方式就刻意很完美的解決這個在編碼過程當中形成的不適感!
固然,對於領域驅動模型的研究還有不少,這裏只是簡單的介紹了我使用過的一種方式,僅供參考!
回過頭來看
看到這裏,貌似饒了一大圈仍是沒有說明白,我使用SSM好好的,而後代碼都是自動生成的,我爲何還須要使用和這個Lombok哪?
其實否則,上述在介紹領域驅動的時候,咱們也能夠看到使用Lombok確實能夠簡化不少編輯器中顯示的代碼,是一種很優雅和美觀的體現!
那我數據庫有100多個表,又無法使用之前的逆向工具生成代碼,我該怎麼辦哪?固然是造---造輪子了!
使用過MyBatis的朋友不少都知道,能夠很方便的使用逆向工程生成咱們須要的代碼,咱們若是引入Lombok的話,咱們只有把他加入到逆向工程裏生成咱們的代碼才能夠避免龐大的工做量。
估計有些小夥伴們已經方了,這麼高大上的東西本身怎麼可能搞定那?不用擔憂,我我的曾經嘗試過使用簡單的代碼實現相似的代碼生成工具。當你去嘗試的時候,就會知道,也不過如此!過程大體是這樣的:
看一個簡單的FreeMarker的關於Bean的一個簡單模板配置,雖然看着複雜,可是都結構化的格式,使用模板配置咱們不但能夠生成Bean、還能夠生成Service、Controller等任何咱們須要的代碼:
固然,咱們也能夠在開源項目的基礎上進行修改的,這樣的話更加容易一些!常見的有mybatis-plus提供的一個代碼生成工具,能夠參考!
好啦!今天給你們介紹了代碼簡化神器Lombok,還有代碼生成器的基本思路,有了Lombok!就讓咱們忘了Java代碼中冗長雜亂的get/set方法吧!
歡迎工做一到八年的Java工程師朋友們加入Java高級交流:854630135
本羣提供免費的學習指導 架構資料 以及免費的解答
不懂得問題均可以在本羣提出來 以後還會有直播平臺和講師直接交流噢