最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

問題說明

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

用過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)目無法正常啟動(dòng)運(yùn)行。

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

對于舊版本項(xiàng)目升級的來說,這將會(huì)是一件很棘手的問題,所有的存在循環(huán)依賴關(guān)系的代碼都需要重新調(diào)整,況且一不小心就會(huì)代碼崩潰無法運(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 // 該注解的使用在下面會(huì)有介紹和說明
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 // 該注解的使用在下面會(huì)有介紹和說明
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使用說明

@RequiredArgsConstructor:該注解是由Lombok提供,可以解決掉大量重復(fù)的@Autowired代碼
注意:使用@RequiredArgsConstructor時(shí),需要使用final關(guān)鍵字
寫在類上可以代替@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è)對其他類的依賴?;跇?gòu)造方法為屬性賦值,容器通過調(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot 按月分表的實(shí)現(xiàn)方式

    springboot 按月分表的實(shí)現(xiàn)方式

    本文主要介紹了springboot 按月分表的實(shí)現(xiàn)方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • JavaWeb中上傳和下載文件實(shí)例代碼

    JavaWeb中上傳和下載文件實(shí)例代碼

    這篇文章主要介紹了JavaWeb中上傳和下載文件實(shí)例代碼,需要的朋友可以參考下
    2017-06-06
  • 詳解Java反射各種應(yīng)用

    詳解Java反射各種應(yīng)用

    Java除了給我們提供在編譯期得到類的各種信息之外,還通過反射讓我們可以在運(yùn)行期間得到類的各種信息。通過反射獲取類的信息,得到類的信息之后,就可以獲取很多相關(guān)內(nèi)容。下面跟著小編一起來看下吧
    2017-01-01
  • SpringBoot yml配置敏感信息加密的實(shí)現(xiàn)

    SpringBoot yml配置敏感信息加密的實(shí)現(xiàn)

    本文主要介紹了SpringBoot yml配置敏感信息加密的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-08-08
  • SpringMVC?RESTFul實(shí)體類創(chuàng)建及環(huán)境搭建

    SpringMVC?RESTFul實(shí)體類創(chuàng)建及環(huán)境搭建

    這篇文章主要為大家介紹了SpringMVC?RESTFul實(shí)體類創(chuàng)建及環(huán)境搭建詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • 淺談C#與Java兩種語言的比較

    淺談C#與Java兩種語言的比較

    今天小編就為大家分享一篇關(guān)于淺談C#與Java兩種語言的比較,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • 使用IDEA查看jar包及jar包的正確打開方式

    使用IDEA查看jar包及jar包的正確打開方式

    IDEA 是把 jar 包添加為 Libraries,然后展開后即可查看,因?yàn)槭蔷幾g后的 class 文件,所以注釋是沒有的,今天小編給大家介紹下使用IDEA查看jar包及jar包的正確打開方式,感興趣的朋友一起看看吧
    2023-07-07
  • 基于java讀取并引用自定義配置文件

    基于java讀取并引用自定義配置文件

    這篇文章主要介紹了基于java讀取并引用自定義配置文件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 一文詳解為什么用ElasticSearch以及和傳統(tǒng)數(shù)據(jù)庫MySQL有什么區(qū)別

    一文詳解為什么用ElasticSearch以及和傳統(tǒng)數(shù)據(jù)庫MySQL有什么區(qū)別

    Elasticsearch和MySQL都是非常重要的數(shù)據(jù)庫管理系統(tǒng),它們在各種應(yīng)用場景中都有著廣泛的應(yīng)用,這篇文章主要介紹了為什么用ElasticSearch以及和傳統(tǒng)數(shù)據(jù)庫MySQL有什么區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2025-07-07
  • Java中二叉樹的先序、中序、后序遍歷以及代碼實(shí)現(xiàn)

    Java中二叉樹的先序、中序、后序遍歷以及代碼實(shí)現(xiàn)

    這篇文章主要介紹了Java中二叉樹的先序、中序、后序遍歷以及代碼實(shí)現(xiàn),一棵二叉樹是結(jié)點(diǎn)的一個(gè)有限集合,該集合或者為空,或者是由一個(gè)根節(jié)點(diǎn)加上兩棵別稱為左子樹和右子樹的二叉樹組成,需要的朋友可以參考下
    2023-11-11

最新評論

白水县| 莆田市| 金坛市| 清丰县| 平南县| 宝鸡市| 辽中县| 子洲县| 清涧县| 化隆| 罗田县| 德格县| 调兵山市| 高陵县| 荥经县| 定结县| 江津市| 唐河县| 德庆县| 望江县| 天祝| 商河县| 湘阴县| 山阳县| 黄平县| 营山县| 温州市| 桐柏县| 息烽县| 剑川县| 醴陵市| 聂荣县| 平塘县| 秀山| 北票市| 宜丰县| 浪卡子县| 南丹县| 清原| 光泽县| 岳普湖县|