亚洲精品中文免费|亚洲日韩中文字幕制服|久久精品亚洲免费|一本之道久久免费

      
      

            <dl id="hur0q"><div id="hur0q"></div></dl>

                Java使用多態(tài)給項(xiàng)目解耦

                Java使用多態(tài)給項(xiàng)目解耦

                原文鏈接:https://www.cnblogs.com/Alickx/p/16368364.html

                Java-SpringBoot-使用多態(tài)給項(xiàng)目解耦

                提及

                今天在打算維護(hù)一下智慧社區(qū)這個(gè)項(xiàng)目的時(shí)候,想到項(xiàng)目是使用Satoken這個(gè)開箱即用的授權(quán)和認(rèn)證的組件,因?yàn)樵陧?xiàng)目開啟的時(shí)候?qū)pringSecurity并不熟悉,而Satoken類似傻瓜式的,導(dǎo)入依賴進(jìn)去,配置一下獲取權(quán)限和角色的方法即可使用。

                但是由此帶來(lái)的問(wèn)題就是,項(xiàng)目中充斥著Satoken的API方法,類似于StpUtil.isLogin(),StpUtil.getLoginIdAsLong()這類方法在Service層中已經(jīng)是相當(dāng)常見了,盡管是非常的方便,但是帶來(lái)的問(wèn)題就是假如后面我要替換另外一款權(quán)限認(rèn)證和授權(quán)的組件,那么這些API方法通通都需要進(jìn)行修改,這種強(qiáng)耦合很明顯是不合理的。

                我突然想到在SpringSecurity中,配置密碼加密方法的時(shí)候,我們可以選擇任意的密碼加密方法。

                @Beanpublic PasswordEncoder getPasswordEncoder() { return new BCryptPasswordEncoder();}

                那么,我能不能也像這樣子,提供一個(gè)統(tǒng)一的接口,通過(guò)選擇實(shí)現(xiàn)方式的不同,從而達(dá)到當(dāng)需要更換別的實(shí)現(xiàn)方式的時(shí)候,只需要更改該處代碼即可。

                多態(tài)

                其實(shí)這需要利用到Java的三大特性之一,多態(tài)。Java的三大特性分別是封裝,繼承和多態(tài)。

                這里使用一個(gè)小例子來(lái)演示一下什么是多態(tài)。

                我們先創(chuàng)建一個(gè)接口,這個(gè)接口只需要含有我們統(tǒng)一所需的方法。

                /** * @Author: Alickx * @Date: 2022/06/12/16:22 * @Description: 統(tǒng)一接口 */public interface IRun { /** * 跑步 */ void run();}

                然后我們需要來(lái)創(chuàng)建幾個(gè)實(shí)現(xiàn)該接口的實(shí)現(xiàn)類

                分別是Man.java和Woman.java

                /** * @Author: Alickx * @Date: 2022/06/12/16:27 * @Description: 男人的實(shí)現(xiàn)類 */public class Man implements IRun{ @Override public void run() { System.out.println(“我是Man,我在run”); }} /** * @Author: Alickx * @Date: 2022/06/12/16:27 * @Description: 女人的實(shí)現(xiàn)類 */public class Woman implements IRun{ @Override public void run() { System.out.println(“我是Woman,我在run”); }}

                接著上面的提及,我們把Man和Woman想成是不同密碼加密方式,而run方法則是他們都需要實(shí)現(xiàn)的密碼加密方法。

                那我們?cè)囍屵@幾個(gè)類型實(shí)例化。

                /** * @Author: Alickx * @Date: 2022/06/12/9:13 * @Description: main方法 */public class Demo8 { public static void main(String[] args) { // 使用man來(lái)實(shí)例化 IRun human1 = new Man(); human1.run(); // 使用woman來(lái)實(shí)例化 IRun human2 = new Woman(); human2.run(); }}

                這里可以看出假如我們要將Man所實(shí)現(xiàn)的run要替換成Woman,我們并不需要修改很多代碼,只需要將IRun human1 = new Man(); 替換成IRun human1 = new Woman(); 即可

                實(shí)際項(xiàng)目改造

                那使用多態(tài)這種特性,我們就可以創(chuàng)建一個(gè)統(tǒng)一的接口,業(yè)務(wù)代碼都使用這個(gè)接口的方法,而通過(guò)實(shí)現(xiàn)該接口的方法,從而可以選擇多種不同的實(shí)現(xiàn)方式。

                那先創(chuàng)建一個(gè)AuthService接口,接口里面包含著我們業(yè)務(wù)代碼所需要的api方法。

                然后創(chuàng)建AuthSatokenServiceImpl 實(shí)現(xiàn)類,該實(shí)現(xiàn)類是使用Satoken來(lái)實(shí)現(xiàn)接口里面的方法。

                簡(jiǎn)單調(diào)用一下Satoken的Api方法。

                那么接口有了,實(shí)現(xiàn)類有了,但是在Springboot項(xiàng)目中,我們將實(shí)例化交給了Spring來(lái)管理,所以還需要?jiǎng)?chuàng)建一個(gè)配置類,來(lái)讓Spring選擇需要實(shí)例化的類。

                Ok,那我們直接修改項(xiàng)目中的代碼,這里舉例一處。

                原先的業(yè)務(wù)代碼。

                想以上紅圈內(nèi)的代碼,我們需要獲取當(dāng)前請(qǐng)求的用戶是否登錄了,假如我們直接使用Satoken的API方法,那么后面需要更換SpringSecurity或者其他一些組件的時(shí)候,就需要大面積的修改這些代碼。

                改造后:

                先注入實(shí)現(xiàn)類

                @AutowiredAuthService authService;

                這樣子就完成了解耦,假如需要更換其他的授權(quán)認(rèn)證組件,只需要?jiǎng)?chuàng)建一個(gè)實(shí)現(xiàn)AuthService接口的實(shí)現(xiàn)類,然后修改一下配置類的實(shí)例即可。

                更改該處即可,即可更換。

                鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
                用戶投稿
                上一篇 2022年6月14日 12:23
                下一篇 2022年6月14日 12:23

                相關(guān)推薦

                • 分享4條發(fā)微商朋友圈的方法(微商朋友圈應(yīng)該怎么發(fā))

                  對(duì)于微商朋友來(lái)說(shuō),朋友圈的重要性不言而喻了。 那么微商的朋友圈到底該怎么發(fā)呢? 為什么同樣是經(jīng)營(yíng)一個(gè)朋友圈,有的微商看起來(lái)逼格滿滿,實(shí)際效果也不錯(cuò);而有的卻動(dòng)都不動(dòng)就被屏蔽甚至拉黑…

                  2022年11月27日
                • 30個(gè)無(wú)加盟費(fèi)的項(xiàng)目(茶顏悅色奶茶店加盟費(fèi)多少)

                  茶顏悅色又爆了,8月18日,茶顏悅色南京門店正式開業(yè),開張不到半小時(shí),門店就人滿為患,消費(fèi)者的購(gòu)買熱情十分高漲,而由于人流量過(guò)大造成擁堵,茶顏悅色也不得不暫停營(yíng)業(yè)。 當(dāng)然,這里面排…

                  2022年11月27日
                • 凈利潤(rùn)率越高越好嗎(凈利潤(rùn)率多少合適)

                  一、持續(xù)增收不增利,平均凈利潤(rùn)率首次跌入個(gè)位數(shù) 2021年,增收不增利依舊是行業(yè)主流。具體來(lái)看,大部分企業(yè)營(yíng)業(yè)收入呈增長(zhǎng)態(tài)勢(shì),E50企業(yè)平均同比增速達(dá)到17.3%,但是利潤(rùn)增速則明…

                  2022年11月26日
                • 《寶可夢(mèng)朱紫》獒教父屬性是什么?獒教父屬性一覽

                  寶可夢(mèng)朱紫里獒教父是一只很強(qiáng)的寶可夢(mèng),很多玩家不清楚獒教父的屬性是什么樣的,下面就給大家?guī)?lái)寶可夢(mèng)朱紫獒教父屬性一覽,感興趣的小伙伴一起來(lái)看看吧,希望能幫助到大家。 獒教父屬性一覽…

                  2022年11月25日
                • 《寶可夢(mèng)朱紫》夢(mèng)特性怎么獲得?隱藏特性獲取方法推薦

                  寶可夢(mèng)朱紫里有很多寶可夢(mèng)都是擁有夢(mèng)特性會(huì)變強(qiáng)的寶可夢(mèng),很多玩家不知道夢(mèng)特性怎么獲得,下面就給大家?guī)?lái)寶可夢(mèng)朱紫隱藏特性獲取方法推薦,感興趣的小伙伴一起來(lái)看看吧,希望能幫助到大家。 …

                  2022年11月25日
                • 《寶可夢(mèng)朱紫》奇魯莉安怎么進(jìn)化?奇魯莉安進(jìn)化方法分享

                  寶可夢(mèng)朱紫中的奇魯莉安要怎么進(jìn)化呢?很多玩家都不知道,下面就給大家?guī)?lái)寶可夢(mèng)朱紫奇魯莉安進(jìn)化方法分享,感興趣的小伙伴一起來(lái)看看吧,希望能幫助到大家。 奇魯莉安進(jìn)化方法分享 奇魯莉安…

                  2022年11月25日
                • 規(guī)范透明促PPP高質(zhì)量發(fā)展——16萬(wàn)億元大市場(chǎng)迎來(lái)新規(guī)

                  近日,財(cái)政部印發(fā)《關(guān)于進(jìn)一步推動(dòng)政府和社會(huì)資本合作(PPP)規(guī)范發(fā)展、陽(yáng)光運(yùn)行的通知》,從做好項(xiàng)目前期論證、推動(dòng)項(xiàng)目規(guī)范運(yùn)作、嚴(yán)防隱性債務(wù)風(fēng)險(xiǎn)、保障項(xiàng)目陽(yáng)光運(yùn)行四個(gè)方面進(jìn)一步規(guī)范P…

                  2022年11月25日
                • 推薦3種白手起家的賺錢項(xiàng)目(白手起家賺錢項(xiàng)目有哪些)

                  如今社會(huì)壓力非常的大,家有老少要養(yǎng)活,這些都加速了窮人想要?jiǎng)?chuàng)業(yè)的欲望,但是創(chuàng)業(yè)路總是那么的艱難,資金就是創(chuàng)業(yè)的重頭戲,所以選擇一個(gè)低成本又賺錢的項(xiàng)目是大多數(shù)人最期望的了,那么有哪些…

                  2022年11月25日
                • 2022全球最常用密碼名單:password成全球最常用密碼

                  11月24日消息,據(jù)IT之家報(bào)道,密碼管理工具NordPass現(xiàn)已發(fā)布2022年全球最常用的密碼名單,結(jié)果顯示用戶仍在使用眾所周知的弱密碼。統(tǒng)計(jì)數(shù)據(jù)顯示,今年全球最常見的密碼是“p…

                  2022年11月25日
                • 英皇文化產(chǎn)業(yè):結(jié)束全部7間英皇UA電影城經(jīng)營(yíng)

                  11月21日,英皇文化產(chǎn)業(yè)發(fā)布公告,英皇娛藝影院(廣東)有限公司(“中國(guó)附屬公司”)為英皇UA的全資附屬營(yíng)運(yùn)公司。 董事會(huì)謹(jǐn)此知會(huì)公司股東,于2022年11月21日,英皇UA(作為…

                  2022年11月24日

                聯(lián)系我們

                聯(lián)系郵箱:admin#wlmqw.com
                工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息