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

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

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

一、序言

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

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

二、問題復(fù)原

1、代碼說明

下面風(fēng)格的代碼比較普遍:兩個類都有調(diào)用對方方法的需求,因此很容易寫成循環(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、錯誤示例

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)引用存在,此屬性默認值為false,顯示聲明為true,可回避項目啟動時控制臺循環(huán)引用異常。

spring:
  main:
    allow-circular-references: true

2、優(yōu)雅解決

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

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

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

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

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

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

如果找不到此依賴,很大可能是阿里云Maven倉庫尚未同步,在項目中強制使用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è)級應(yīng)用主流標準,其微小的變化對整合生態(tài)帶來不可估量的影響。從跟隨者轉(zhuǎn)化為引導(dǎo)者,果斷禁止循環(huán)依賴問題,體現(xiàn)的是作為引導(dǎo)者的擔(dān)當。

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

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

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

相關(guān)文章

  • Java批量向PDF文件中添加圖像水印實現(xiàn)細節(jié)

    Java批量向PDF文件中添加圖像水印實現(xiàn)細節(jié)

    這篇文章主要為大家介紹了Java批量向PDF文件中添加圖像水印實現(xiàn)細節(jié),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • Java框架Quartz中API、Jobs和Trigger詳解

    Java框架Quartz中API、Jobs和Trigger詳解

    這篇文章主要介紹了Java框架Quartz中API、Jobs和Trigger詳解,JobDetail?對象是在將?job?加入?scheduler?時,由客戶端程序(你的程序)創(chuàng)建的,它包含?job?的各種屬性設(shè)置,以及用于存儲?job?實例狀態(tài)信息的?JobDataMap,需要的朋友可以參考下
    2023-11-11
  • 詳解springboot中mybatis注解形式

    詳解springboot中mybatis注解形式

    在本文中小編給大家分享了關(guān)于springboot中mybatis注解形式的介紹,有興趣的可以跟著學(xué)習(xí)下。
    2018-10-10
  • Java ArrayList add(int index, E element)和set(int index, E element)兩個方法的說明

    Java ArrayList add(int index, E element)和set(int index, E el

    今天小編就為大家分享一篇關(guān)于Java ArrayList add(int index, E element)和set(int index, E element)兩個方法的說明,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • Spring?Boot應(yīng)用程序中如何使用Keycloak詳解

    Spring?Boot應(yīng)用程序中如何使用Keycloak詳解

    這篇文章主要為大家介紹了Spring?Boot應(yīng)用程序中如何使用Keycloak詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • 2種Java刪除ArrayList中的重復(fù)元素的方法

    2種Java刪除ArrayList中的重復(fù)元素的方法

    這篇文章主要介紹了2種Java刪除ArrayList中的重復(fù)元素的方法,感興趣的朋友可以參考下
    2015-08-08
  • Mybatis-Plus中Mapper的接口文件與xml文件相關(guān)的坑記錄

    Mybatis-Plus中Mapper的接口文件與xml文件相關(guān)的坑記錄

    這篇文章主要介紹了Mybatis-Plus中Mapper的接口文件與xml文件相關(guān)的坑記錄,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Java方法能定義多少個參數(shù)你知道嗎

    Java方法能定義多少個參數(shù)你知道嗎

    這篇文章主要給大家介紹了關(guān)于Java方法能定義多少個參數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • Eclipse配置python開發(fā)環(huán)境過程圖解

    Eclipse配置python開發(fā)環(huán)境過程圖解

    這篇文章主要介紹了Eclipse配置python開發(fā)環(huán)境過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • java.lang.UnsupportedOperationException分析及解決辦法

    java.lang.UnsupportedOperationException分析及解決辦法

    日常開發(fā)中我遇到j(luò)ava.lang.UnsupportedOperationException:異常兩次了,下面這篇文章主要給對大家介紹了關(guān)于java.lang.UnsupportedOperationException分析及解決辦法,需要的朋友可以參考下
    2024-03-03

最新評論