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

SpringBoot2.6.x默認(rèn)禁用循環(huán)依賴后的問題解決

 更新時(shí)間:2022年02月23日 09:59:16   作者:Java知識(shí)圖譜  
由于SpringBoot從底層逐漸引導(dǎo)開發(fā)者書寫規(guī)范的代碼,同時(shí)也是個(gè)憂傷的消息,循環(huán)依賴的應(yīng)用場景實(shí)在是太廣泛了,所以SpringBoot 2.6.x不推薦使用循環(huán)依賴,本文給大家說下SpringBoot2.6.x默認(rèn)禁用循環(huán)依賴后的應(yīng)對(duì)策略,感興趣的朋友一起看看吧

一、序言

SpringBoot 2.6.x不推薦使用循環(huán)依賴,這是一個(gè)好消息,SpringBoot從底層逐漸引導(dǎo)開發(fā)者書寫規(guī)范的代碼,同時(shí)也是個(gè)憂傷的消息,循環(huán)依賴的應(yīng)用場景實(shí)在是太廣泛了。

如果從低版本升級(jí)到2.6.x,那么很大概率遇到的第一個(gè)問題便是循環(huán)依賴問題。

二、問題復(fù)原

1、代碼說明

下面風(fēng)格的代碼比較普遍:兩個(gè)類都有調(diào)用對(duì)方方法的需求,因此很容易寫成循環(huán)引用。

@Service
public class TbDeptServiceImpl extends ServiceImpl<TbDeptMapper, TbDept> implements ITbDeptService {
    
    @Autowired
    private ITbStaffService staffService;
}
@Service
public class TbStaffServiceImpl extends ServiceImpl<TbStaffMapper, TbStaff> implements ITbStaffService {
    @Autowired
    private ITbDeptService deptService;
}

2、錯(cuò)誤示例

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

Despite circular references being allowed, the dependency cycle between beans could not be broken. Update your application to remove the dependency cycle.

三、問題解決

1、粗暴解決

最簡單的方式是在全局配置文件中允許循環(huán)引用存在,此屬性默認(rèn)值為false,顯示聲明為true,可回避項(xiàng)目啟動(dòng)時(shí)控制臺(tái)循環(huán)引用異常。

spring:
  main:
    allow-circular-references: true

2、優(yōu)雅解決

Spring官方默認(rèn)禁止使用循環(huán)依賴,盡管留有可選配置,允許開發(fā)者繼續(xù)使用循環(huán)依賴。

Spring官方的初心是不希望開發(fā)者編寫循環(huán)依賴的代碼,也就是說未來的某個(gè)版本可能強(qiáng)制不得使用循環(huán)依賴,因此逐漸在新項(xiàng)目中消除循環(huán)依賴是不得不面對(duì)的問題。

使用方法的返回值獲取實(shí)例對(duì)象,替換通過成員變量注入實(shí)例對(duì)象。

@Service
public class TbDeptServiceImpl extends ServiceImpl<TbDeptMapper, TbDept> implements ITbDeptService {
    /**
     * 使用方法返回實(shí)例對(duì)象,替換成員變量注入
     * @return ITbStaffService
     */
    public ITbStaffService getStaffService(){
        return SpringUtils.getBean(ITbStaffService.class);
    }
}
@Service
public class TbStaffServiceImpl extends ServiceImpl<TbStaffMapper, TbStaff> implements ITbStaffService {
    /**
     * 使用方法返回實(shí)例對(duì)象,替換成員變量注入
     * @return ITbStaffService
     */
    public ITbDeptService getDeptService(){
        return SpringUtils.getBean(ITbDeptService.class);
    }
}

其中需要使用如下依賴,此依賴是筆者抽離出來的公共依賴,可跨項(xiàng)目使用。

<dependency>
    <groupId>xin.altitude.cms.common</groupId>
    <artifactId>ucode-cms-common</artifactId>
    <version>1.3.4</version>
</dependency>

如果找不到此依賴,很大可能是阿里云Maven倉庫尚未同步,在項(xiàng)目中強(qiáng)制使用Maven中央倉庫即可。

<repositories>
    <repository>
        <id>public</id>
        <name>maven nexus</name>
        <url>https://repo1.maven.org/maven2/</url>
        <snapshots>
            <updatePolicy>always</updatePolicy>
        </snapshots>
    </repository>
</repositories>

四、小結(jié)

Spring生態(tài)作為廣泛使用的框架,儼然成為Java企業(yè)級(jí)應(yīng)用主流標(biāo)準(zhǔn),其微小的變化對(duì)整合生態(tài)帶來不可估量的影響。從跟隨者轉(zhuǎn)化為引導(dǎo)者,果斷禁止循環(huán)依賴問題,體現(xiàn)的是作為引導(dǎo)者的擔(dān)當(dāng)。

循環(huán)引用使用習(xí)慣了,初步看起來代碼沒毛病,仔細(xì)想想是不合理的設(shè)計(jì)。循環(huán)依賴的直接表現(xiàn)是你中有我,我中有你,從對(duì)象的設(shè)計(jì)上令人費(fèi)解。

最為開發(fā)者時(shí)刻關(guān)注底層框架的變動(dòng),將會(huì)在應(yīng)用層收益。這里所說的底層框架是指JDK、Spring生態(tài)、Apache、知名大廠開源并廣泛被應(yīng)用的框架,比如guava等。

到此這篇關(guān)于SpringBoot2.6.x默認(rèn)禁用循環(huán)依賴后的應(yīng)對(duì)策略的文章就介紹到這了,更多相關(guān)SpringBoot2.6.x禁用循環(huán)依賴內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • IDEA JeeSite框架httpSession.invalidate()無效問題解決方案

    IDEA JeeSite框架httpSession.invalidate()無效問題解決方案

    這篇文章主要介紹了IDEA JeeSite框架httpSession.invalidate()無效問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • java字符串日期類Date和Calendar相互轉(zhuǎn)化及相關(guān)常用方法

    java字符串日期類Date和Calendar相互轉(zhuǎn)化及相關(guān)常用方法

    Java語言的Calendar(日歷),Date(日期),和DateFormat(日期格式)組成了Java標(biāo)準(zhǔn)的一個(gè)基本但是非常重要的部分,下面這篇文章主要給大家介紹了關(guān)于java字符串日期類Date和Calendar相互轉(zhuǎn)化及相關(guān)常用方法的相關(guān)資料,需要的朋友可以參考下
    2023-12-12
  • 圖解Java?ReentrantLock公平鎖和非公平鎖的實(shí)現(xiàn)

    圖解Java?ReentrantLock公平鎖和非公平鎖的實(shí)現(xiàn)

    ReentrantLock是Java并發(fā)中十分常用的一個(gè)類,具備類似synchronized鎖的作用。但是相比synchronized,?它具備更強(qiáng)的能力,同時(shí)支持公平鎖和非公平鎖。本文就來聊聊ReentrantLock公平鎖和非公平鎖的實(shí)現(xiàn),需要的可以參考一下
    2022-10-10
  • Java對(duì)日期Date類進(jìn)行加減運(yùn)算、年份加減月份加減、時(shí)間差等等

    Java對(duì)日期Date類進(jìn)行加減運(yùn)算、年份加減月份加減、時(shí)間差等等

    這篇文章主要介紹了Java對(duì)日期Date類進(jìn)行加減運(yùn)算、年份加減月份加減、時(shí)間差等等,在網(wǎng)上查閱資料,加上自己總結(jié)的一些關(guān)于Date類的工具類
    2017-01-01
  • ssm項(xiàng)目實(shí)現(xiàn)用戶登陸持久化(token)

    ssm項(xiàng)目實(shí)現(xiàn)用戶登陸持久化(token)

    這篇文章主要介紹了ssm項(xiàng)目實(shí)現(xiàn)用戶登陸持久化(token),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java實(shí)現(xiàn)摳圖片文字或簽名的完整代碼

    Java實(shí)現(xiàn)摳圖片文字或簽名的完整代碼

    這篇文章主要介紹了java摳圖片文字或簽名的運(yùn)行原理,本文分步驟通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • java變量的區(qū)別淺析

    java變量的區(qū)別淺析

    對(duì)于java的變量天天見到,但有時(shí)候別人問起它們的區(qū)別有時(shí)候也說不全,所以就找了些資料整理了整理...
    2013-12-12
  • 淺談SpringMVC HandlerInterceptor詭異問題排查

    淺談SpringMVC HandlerInterceptor詭異問題排查

    這篇文章主要介紹了淺談SpringMVC HandlerInterceptor詭異問題排查,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-05-05
  • Spring?Boot實(shí)現(xiàn)WebSocket實(shí)時(shí)通信

    Spring?Boot實(shí)現(xiàn)WebSocket實(shí)時(shí)通信

    本文主要介紹了Spring?Boot實(shí)現(xiàn)WebSocket實(shí)時(shí)通信,包含實(shí)現(xiàn)實(shí)時(shí)消息傳遞和群發(fā)消息等功能,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • 16進(jìn)制顯示字節(jié)流技巧分享

    16進(jìn)制顯示字節(jié)流技巧分享

    這篇文章主要介紹了16進(jìn)制顯示字節(jié)流的技巧分享,需要的朋友可以參考下
    2014-02-02

最新評(píng)論