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

SpringBoot3.x循環(huán)依賴問(wèn)題解決方案

 更新時(shí)間:2023年06月06日 15:28:58   作者:陌路  
這篇文章主要介紹了SpringBoot3.x循環(huán)依賴的相關(guān)知識(shí),本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

問(wèn)題說(shuō)明

SpringBoot3.x版本已經(jīng)發(fā)布,從SpringBoot2.6.x后就做了很多的改變。

用過(guò)SpringBoot2.7.5~x版本的伙伴應(yīng)該會(huì)發(fā)現(xiàn),SpringBoot項(xiàng)目中如果存在循環(huán)依賴關(guān)系,則在啟動(dòng)項(xiàng)目的時(shí)候會(huì)出現(xiàn)異常錯(cuò)誤信息,提示內(nèi)容大致為:項(xiàng)目中存在循環(huán)依賴,項(xiàng)目無(wú)法正常啟動(dòng)運(yùn)行。

SpringBoot2.7.5~x版本以后至SpringBoot3.x都存在這個(gè)問(wèn)題,Spring已經(jīng)摒棄循環(huán)依賴的問(wèn)題,需要開(kāi)發(fā)人員自行解決,或在開(kāi)發(fā)過(guò)程中盡量避免循環(huán)依賴的出現(xiàn)。

對(duì)于舊版本項(xiàng)目升級(jí)的來(lái)說(shuō),這將會(huì)是一件很棘手的問(wèn)題,所有的存在循環(huán)依賴關(guān)系的代碼都需要重新調(diào)整,況且一不小心就會(huì)代碼崩潰無(wú)法運(yùn)行。

解決方案

第一種、開(kāi)啟循環(huán)依賴(不推薦)

Spring默認(rèn)已經(jīng)不在支持循環(huán)依賴,在配置文件中重新開(kāi)啟循環(huán)依賴支持

spring:
    main:
        allow-circular-references:true #允許循環(huán)引用

第二種、懶加載

@Lazy:配合使用該注解可以解決循環(huán)依賴問(wèn)題(在需要注入Bean的地方加上該注解)

@Lazy // 使用懶加載
@Autowired
private OneService oneService;

第三種、控制反轉(zhuǎn)

@Service
@RequiredArgsConstructor // 該注解的使用在下面會(huì)有介紹和說(shuō)明
public class OneServiceImpl implements OneService {
    private final ConfigurableListableBeanFactory beanFactory;
    //代替循環(huán)依賴
    public TwoService getTwoService(){
        return beanFactory.getBean(TwoService.class);
    }
}

使用getTwoService() 直接從bean工廠里面去拿對(duì)應(yīng)的Bean來(lái)使用

@Service
@RequiredArgsConstructor // 該注解的使用在下面會(huì)有介紹和說(shuō)明
public class TwoServiceImpl implements TwoService {
    private final ConfigurableListableBeanFactory beanFactory;
    //代替循環(huán)依賴
    public OneService getOneService(){
        return beanFactory.getBean(OneService.class);
    }
}

以上代碼中,OneService依賴于TwoService,而TwoService也依賴于OneService,從而產(chǎn)生循環(huán)依賴
解決:每次使用的時(shí)候就去Bean工廠里去獲取,這樣就不存在循環(huán)依賴了

@RequiredArgsConstructor使用說(shuō)明

@RequiredArgsConstructor:該注解是由Lombok提供,可以解決掉大量重復(fù)的@Autowired代碼
注意:使用@RequiredArgsConstructor時(shí),需要使用final關(guān)鍵字
寫(xiě)在類上可以代替@Autowired注解,需要注意的是在注入時(shí)需要用final定義,或者使用@notnull注解

@RestController
@RequiredArgsConstructor // 代替@Autowired注解
@RequestMapping("/api/v1/one")
public class OneController{
	private final OneService oneService; // 需要final關(guān)鍵字
	private final TwoService twoService; // 需要final關(guān)鍵字
	@GetMapping("{id}")
	public ResultVo<String> getDetails(@PathVariable("id") Long id){
		return ResultVo.ok(oneService.getDetailsById(id));
	}
}

注意點(diǎn):

1、必須聲明的變量為final。
2、根據(jù)構(gòu)造器注入的,相當(dāng)于容器調(diào)用帶有一組帶有參數(shù)的類構(gòu)造函數(shù)時(shí),基于構(gòu)造函數(shù)的 DI 就完成了,其中每個(gè)參數(shù)代表一個(gè)對(duì)其他類的依賴?;跇?gòu)造方法為屬性賦值,容器通過(guò)調(diào)用類的構(gòu)造方法將其進(jìn)行依賴注入。
3、當(dāng)需要注入Bean的時(shí)候可以直接在類名稱上使用@RequiredArgsConstructor,從而代替了大量的@Autowrited注解。

到此這篇關(guān)于SpringBoot3.x循環(huán)依賴的文章就介紹到這了,更多相關(guān)SpringBoot循環(huán)依賴內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MyBatis實(shí)現(xiàn)高級(jí)映射的示例代碼

    MyBatis實(shí)現(xiàn)高級(jí)映射的示例代碼

    高級(jí)映射主要還是映射,只是映射中的數(shù)據(jù)關(guān)系復(fù)雜了,其中就包括一對(duì)一、一對(duì)多、多對(duì)多的關(guān)系,本文主要介紹了MyBatis實(shí)現(xiàn)高級(jí)映射的示例代碼,感興趣的可以了解一下
    2024-06-06
  • Java數(shù)據(jù)結(jié)構(gòu)之有效隊(duì)列定義與用法示例

    Java數(shù)據(jù)結(jié)構(gòu)之有效隊(duì)列定義與用法示例

    這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之有效隊(duì)列定義與用法,結(jié)合實(shí)例形式分析了java有效隊(duì)列的數(shù)據(jù)插入、刪除、判斷、計(jì)算等相關(guān)操作技巧,需要的朋友可以參考下
    2017-10-10
  • springBoot項(xiàng)目中的全局異常處理和自定義異常處理實(shí)現(xiàn)

    springBoot項(xiàng)目中的全局異常處理和自定義異常處理實(shí)現(xiàn)

    異常是由于程序邏輯錯(cuò)誤、運(yùn)行環(huán)境問(wèn)題、用戶輸入錯(cuò)誤等原因?qū)е碌囊环N非正常的狀態(tài)或事件,本文主要介紹了springBoot項(xiàng)目中的全局異常處理和自定義異常處理實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-08-08
  • RocketMQ?offset確認(rèn)機(jī)制示例詳解

    RocketMQ?offset確認(rèn)機(jī)制示例詳解

    這篇文章主要為大家介紹了RocketMQ?offset確認(rèn)機(jī)制示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • JAVA Calendar類使用方面實(shí)例

    JAVA Calendar類使用方面實(shí)例

    這篇文章主要介紹了JAVA Calendar類使用方面實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 基于Spring Security前后端分離的權(quán)限控制系統(tǒng)問(wèn)題

    基于Spring Security前后端分離的權(quán)限控制系統(tǒng)問(wèn)題

    本文給大家分享基于Spring Security前后端分離的權(quán)限控制系統(tǒng)問(wèn)題,需要了解權(quán)限如何加載,權(quán)限匹配規(guī)則和登錄的實(shí)現(xiàn)代碼,對(duì)Spring Security權(quán)限控制系統(tǒng)相關(guān)知識(shí)感興趣的朋友一起看看吧
    2021-06-06
  • Java import static及import原理區(qū)別解析

    Java import static及import原理區(qū)別解析

    這篇文章主要介紹了Java import static及import原理區(qū)別解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • mybatis中insert主鍵ID獲取和多參數(shù)傳遞的示例代碼

    mybatis中insert主鍵ID獲取和多參數(shù)傳遞的示例代碼

    這篇文章主要介紹了mybatis中insert主鍵ID獲取和多參數(shù)傳遞的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • 并發(fā)編程之Java內(nèi)存模型

    并發(fā)編程之Java內(nèi)存模型

    這篇文章主要介紹了Java并發(fā)編程之內(nèi)存模型,Java內(nèi)存模型中的順序一致性,主要介紹重排序與順序一致性內(nèi)存模型,下面文章將圍繞Java內(nèi)存模型展開(kāi)內(nèi)容,需要的小伙伴可以參考一下
    2021-11-11
  • springboot的統(tǒng)一異常處理,使用@RestControllerAdvice詳解

    springboot的統(tǒng)一異常處理,使用@RestControllerAdvice詳解

    @RestControllerAdvice是Spring Boot中的全局異常處理注解,結(jié)合了@ControllerAdvice和@ResponseBody的功能,通過(guò)創(chuàng)建自定義異常類和全局異常處理器,可以實(shí)現(xiàn)統(tǒng)一異常處理,確保API的一致性和響應(yīng)的標(biāo)準(zhǔn)化
    2024-12-12

最新評(píng)論