欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于idea 的 Java中的get/set方法之優(yōu)雅的寫法

 更新時(shí)間:2019年01月10日 11:31:41   作者:徐劉根  
這篇文章主要介紹了基于idea 的 Java中的get/set方法之優(yōu)雅的寫法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

曾幾何時(shí),我們寫代碼的時(shí)候,每次寫B(tài)ean的時(shí)候都會使用快捷鍵生成get/set方法,有時(shí)候我經(jīng)常會想,既然每一個(gè)Bean我們都會給其提供get/set方法,那么為什么還有會這個(gè)東西哪?(當(dāng)然這只是一個(gè)問題,畢竟還是很有用的,這一點(diǎn)就是Java語言中的private、public等作用域)

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

Lombok

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

Lombok是一個(gè)可以通過簡單的注解形式來幫助我們簡化消除一些必須有但顯得很臃腫的Java代碼的工具,通過使用對應(yīng)的注解,可以在編譯源碼的時(shí)候生成對應(yīng)的方法。

https://projectlombok.org/

https://github.com/rzwitserloot/lombok

如何使用

1、安裝IDEA插件Lombok Plugin


2、引入pom,最新版本為1.16.18


3、簡單使用,設(shè)置get/set方法


4、稍微復(fù)雜一點(diǎn)的使用


其他使用

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

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

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

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

A:首先我們應(yīng)該清楚,我們第一步是需要安裝IDEA的插件,只有安裝了插件我們才可以在代碼中直接使用get和set方法,如果沒有話他會直接報(bào)錯(cuò)的,就是沒有g(shù)et和set方法,安裝了插件我們就可以使用這些方法,并且在編譯之后的class文件中也是有這些方法的。當(dāng)然,為什么裝了插件之后就可以調(diào)用了,這個(gè)問題太過深奧,這里不再細(xì)聊,有興趣的可以參考相關(guān)文章進(jìn)行學(xué)習(xí)。

一些思考

看到這里,很多人要說了,我使用的要么是SSM框架,要么是SSH框架,這些框架都可以使用逆向工程的方式生成我們的代碼,當(dāng)然包括Bean,我們在使用逆向工程的時(shí)候,get/set方法不都是自動生成的嗎?使用這個(gè)Lombok盡管優(yōu)美,我們還不是需要進(jìn)行自己寫注解的嗎?

首先,我們先聊一下最近一個(gè)比較火的領(lǐng)域驅(qū)動設(shè)計(jì)中的貧血、失血、脹血和充血模型。

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

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

2、貧血模型:貧血模型中包含了一些業(yè)務(wù)邏輯,但不包含依賴持久層的業(yè)務(wù)邏輯。這部分依賴于持久層的業(yè)務(wù)邏輯將會放到服務(wù)層中??梢钥闯?,貧血模型中的領(lǐng)域?qū)ο笫遣灰蕾囉诔志脤拥摹?/p>

3、充血模型:充血模型中包含了所有的業(yè)務(wù)邏輯,包括依賴于持久層的業(yè)務(wù)邏輯。所以,使用充血模型的領(lǐng)域?qū)邮且蕾囉诔志脤?,簡單表示就?UI層->服務(wù)層->領(lǐng)域?qū)?lt;->持久層。

4、脹血模型:脹血模型就是把和業(yè)務(wù)邏輯不相關(guān)的其他應(yīng)用邏輯(如授權(quán)、事務(wù)等)都放到領(lǐng)域模型中,這是一種極差的設(shè)計(jì)方式。

看到這里,可能大家一臉迷茫!這樣說吧,領(lǐng)域驅(qū)動模型設(shè)計(jì)的一個(gè)特點(diǎn)是對于一個(gè)實(shí)體對象,它不但有相關(guān)的屬性還要有其自身的方法(他的能力,可以做的事情)。

舉個(gè)栗子:一個(gè)User類,不但要有人的基本屬性,還要有這個(gè)人能做的事情(不僅僅是get/set方法)但是,這一看就是一個(gè)充血模型,但是只有基本的屬性和get/set方法的話他就是一個(gè)失血模型了,因此對于領(lǐng)域驅(qū)動來說,我們可以這樣操作,通過一個(gè)DTO包含其所有的基本屬性和get/set方法,然后領(lǐng)域?qū)嶓w對象繼承這個(gè)DTO,當(dāng)然這只是一種用法!

圖:領(lǐng)域驅(qū)動的一種使用模式

因此對于一個(gè)充血模型的領(lǐng)域驅(qū)動實(shí)體對象來說,他不但有屬性還有他的各種方法,如果整個(gè)的都放在一個(gè)類里的話根本不好區(qū)分他到底是get/set方法還是其他功能方法,這里我們使用Lombok提供的注解的方式就刻意很完美的解決這個(gè)在編碼過程中造成的不適感!

當(dāng)然,對于領(lǐng)域驅(qū)動模型的研究還有很多,這里只是簡單的介紹了我使用過的一種方式,僅供參考!

回過頭來看

看到這里,貌似饒了一大圈還是沒有說明白,我使用SSM好好的,然后代碼都是自動生成的,我為什么還需要使用和這個(gè)Lombok哪?

其實(shí)不然,上述在介紹領(lǐng)域驅(qū)動的時(shí)候,我們也可以看到使用Lombok確實(shí)可以簡化很多編輯器中顯示的代碼,是一種很優(yōu)雅和美觀的體現(xiàn)!

那我數(shù)據(jù)庫有100多個(gè)表,又沒法使用以前的逆向工具生成代碼,我該怎么辦哪?當(dāng)然是造---造輪子了!

使用過MyBatis的朋友很多都知道,可以很方便的使用逆向工程生成我們需要的代碼,我們?nèi)绻隠ombok的話,我們只有把他加入到逆向工程里生成我們的代碼才可以避免龐大的工作量。

估計(jì)有些小伙伴們已經(jīng)方了,這么高大上的東西自己怎么可能搞定那?不用擔(dān)心,我個(gè)人曾經(jīng)嘗試過使用簡單的代碼實(shí)現(xiàn)類似的代碼生成工具。當(dāng)你去嘗試的時(shí)候,就會知道,也不過如此!過程大致是這樣的:

看一個(gè)簡單的FreeMarker的關(guān)于Bean的一個(gè)簡單模板配置,雖然看著復(fù)雜,但是都結(jié)構(gòu)化的格式,使用模板配置我們不但可以生成Bean、還可以生成Service、Controller等任何我們需要的代碼:

當(dāng)然,我們也可以在開源項(xiàng)目的基礎(chǔ)上進(jìn)行修改的,這樣的話更加容易一些!常見的有mybatis-plus提供的一個(gè)代碼生成工具,可以參考!

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • springcloud?feign?接口指定接口服務(wù)ip方式

    springcloud?feign?接口指定接口服務(wù)ip方式

    這篇文章主要介紹了springcloud?feign?接口指定接口服務(wù)ip方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java中spring boot 字符串判斷是否為空方法小結(jié)

    Java中spring boot 字符串判斷是否為空方法小結(jié)

    這篇文章主要介紹了Java中spring boot字符串判斷是否為空,通過安裝依賴,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-11-11
  • Java基于FFmpeg實(shí)現(xiàn)Mp4視頻轉(zhuǎn)GIF

    Java基于FFmpeg實(shí)現(xiàn)Mp4視頻轉(zhuǎn)GIF

    FFmpeg是一套可以用來記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開源計(jì)算機(jī)程序。本文主要介紹了在Java中如何基于FFmpeg進(jìn)行Mp4視頻到Gif動圖的轉(zhuǎn)換,感興趣的小伙伴可以了解一下
    2022-11-11
  • Spring MVC中自定義攔截器的實(shí)例講解

    Spring MVC中自定義攔截器的實(shí)例講解

    下面小編就為大家?guī)硪黄猄pring MVC中自定義攔截器的實(shí)例講解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • springboot的類加載器(org.springframework.boot.loader)過程詳解

    springboot的類加載器(org.springframework.boot.loader)過程詳解

    這篇文章主要介紹了springboot的類加載器(org.springframework.boot.loader),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Java實(shí)現(xiàn)的簡單音樂播放器功能示例

    Java實(shí)現(xiàn)的簡單音樂播放器功能示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的簡單音樂播放器功能,涉及java針對多媒體文件相關(guān)載入、播放相關(guān)操作技巧,需要的朋友可以參考下
    2019-02-02
  • apache ant進(jìn)行zip解壓縮操作示例分享

    apache ant進(jìn)行zip解壓縮操作示例分享

    本文主要介紹了使用apache ant進(jìn)行zip解壓縮操作的方法,可以解決中文編碼和首層父類無法創(chuàng)建問題,需要的朋友可以參考下
    2014-02-02
  • 深入了解Java并發(fā)AQS的獨(dú)占鎖模式

    深入了解Java并發(fā)AQS的獨(dú)占鎖模式

    AQS是一種提供了原子式管理同步狀態(tài)、阻塞和喚醒線程功能以及隊(duì)列模型的簡單框架。一般來說,同步工具實(shí)現(xiàn)鎖的控制分為獨(dú)占鎖和共享鎖,而AQS提供了對這兩種模式的支持。本文主要來介紹一下獨(dú)占鎖模式,需要的可以參考一下
    2022-10-10
  • Android仿微信實(shí)現(xiàn)左滑顯示刪除按鈕功能

    Android仿微信實(shí)現(xiàn)左滑顯示刪除按鈕功能

    這篇文章主要為大家詳細(xì)介紹了java仿微信實(shí)現(xiàn)左滑顯示刪除按鈕功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • Maven打包SpringBoot工程的實(shí)現(xiàn)示例

    Maven打包SpringBoot工程的實(shí)現(xiàn)示例

    在使用Spring Boot和Maven的項(xiàng)目中,你可以使用Maven來打包你的項(xiàng)目,本文主要介紹了Maven打包SpringBoot工程的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05

最新評論