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

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

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

問題說明

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

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

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

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

解決方案

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

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

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

第二種、懶加載

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

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

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

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

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

@Service
@RequiredArgsConstructor // 該注解的使用在下面會有介紹和說明
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)依賴
解決:每次使用的時候就去Bean工廠里去獲取,這樣就不存在循環(huán)依賴了

@RequiredArgsConstructor使用說明

@RequiredArgsConstructor:該注解是由Lombok提供,可以解決掉大量重復(fù)的@Autowired代碼
注意:使用@RequiredArgsConstructor時,需要使用final關(guān)鍵字
寫在類上可以代替@Autowired注解,需要注意的是在注入時需要用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ù)時,基于構(gòu)造函數(shù)的 DI 就完成了,其中每個參數(shù)代表一個對其他類的依賴?;跇?gòu)造方法為屬性賦值,容器通過調(diào)用類的構(gòu)造方法將其進(jìn)行依賴注入。
3、當(dāng)需要注入Bean的時候可以直接在類名稱上使用@RequiredArgsConstructor,從而代替了大量的@Autowrited注解。

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

相關(guān)文章

  • Spring?AOP通知類型與實(shí)戰(zhàn)示例講解

    Spring?AOP通知類型與實(shí)戰(zhàn)示例講解

    Spring?AOP提供了五種通知類型:@Before、@After、@AfterReturning、@AfterThrowing和@Around,每種通知類型都有其特定的使用場景和實(shí)現(xiàn)方式,通過合理使用這些通知類型,可以實(shí)現(xiàn)各種橫切關(guān)注點(diǎn)的模塊化和解耦,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • springboot一個自定義注解如何搞定多線程事務(wù)

    springboot一個自定義注解如何搞定多線程事務(wù)

    文章介紹了Spring?Boot中使用`@Async`注解進(jìn)行聲明式多線程編程的方法,以及如何通過自定義注解和AOP實(shí)現(xiàn)多線程事務(wù)控制,同時,還解釋了`CountDownLatch`的使用場景及其工作原理
    2024-12-12
  • 使用IDEA直接連接MySQL數(shù)據(jù)庫的方法

    使用IDEA直接連接MySQL數(shù)據(jù)庫的方法

    這篇文章主要介紹了如何使用IDEA直接連接MySQL數(shù)據(jù)庫,首先需要新建一個空項目,第一次連接 需要先下載驅(qū)動,文中給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • Java 中運(yùn)行字符串表達(dá)式的方法

    Java 中運(yùn)行字符串表達(dá)式的方法

    這篇文章主要介紹了Java 中運(yùn)行字符串表達(dá)式的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-11-11
  • SpringBoot中事半功倍的工具類合集分享

    SpringBoot中事半功倍的工具類合集分享

    在日常開發(fā)中經(jīng)常有這樣那樣的小功能需要實(shí)現(xiàn),這些一般會作為工具類存在,在項目中有一些通用的功能,Spring內(nèi)置了需要工具類,而且經(jīng)過了大量的驗證,可以在開發(fā)中助你一臂之力,快跟隨小編一起來看看吧
    2023-02-02
  • SpringBoot全局異常捕獲參數(shù)以及參數(shù)異常的解決方案

    SpringBoot全局異常捕獲參數(shù)以及參數(shù)異常的解決方案

    這篇文章主要介紹了SpringBoot全局異常捕獲參數(shù)以及參數(shù)異常的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • Mybatis-plus4條件構(gòu)造器使用方式

    Mybatis-plus4條件構(gòu)造器使用方式

    這篇文章主要介紹了Mybatis-plus4條件構(gòu)造器使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 整理Java編程中常用的基本描述符與運(yùn)算符

    整理Java編程中常用的基本描述符與運(yùn)算符

    這篇文章主要介紹了Java編程中常用的基本描述符與運(yùn)算符整理,包括運(yùn)算符優(yōu)先級等平時經(jīng)常查看反復(fù)記憶的知識點(diǎn),需要的朋友可以參考下
    2016-02-02
  • java8新特性-Stream入門學(xué)習(xí)心得

    java8新特性-Stream入門學(xué)習(xí)心得

    這篇文章主要介紹了java8新特性-Stream入門學(xué)習(xí)心得,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java SpringMVC 異常處理SimpleMappingExceptionResolver類詳解

    Java SpringMVC 異常處理SimpleMappingExceptionResolver類詳解

    這篇文章主要介紹了SpringMVC 異常處理SimpleMappingExceptionResolver類詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09

最新評論