解决spring2.6X循环依赖问题

本文探讨了Spring框架2.6版本后循环依赖问题的解决方案。通过避免成员变量间的直接依赖,并利用控制反转从Bean工厂获取实例的方法,有效地解决了循环依赖带来的挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        spring的循环依赖问题是个老生常谈的问题,spring2.6版本之后,循环依赖问题便被禁止使用了。但是当项目升级spring版本的时候,会大概率遇到循环依赖问题,我们此时又不能通过spring.main.allow-circular-references: true配置让spring帮我们去解决循环依赖问题,所以只能自己想办法。

        想要解决循环依赖问题,首先我们要先搞清楚为什么出现循环依赖问题。循环依赖的场景很简单,就是A依赖B,B依赖A,而出现问题的是AB初始化这一步。

        我们知道spring的核心就是控制反转跟依赖注入。循环依赖问题就出现在依赖注入这一步,当AB相互依赖的时候,初始化A必须要初始化B,初始化B必须要初始化A,所以就会有死循环。2.6之前的spring版本,spring通过提前暴露bean的方式,将实例化和初始化分开做,以此来解决循环依赖,但是现在2.6之后,spring不会帮你做了,所以我们解决循环依赖问题的思路就是:不使用循环依赖

        听起来像废话对吧,不使用循环依赖的意思是AB不作为对方的成员变量引入,这样的话从根本上就不会有循环依赖的问题。但是,AB相互调用咋办呢?很简单,我们还有控制反转啊,我们直接从bean工厂里面去拿呀。

        下面是示例代码:

@Service
@RequiredArgsConstructor
public class CardServiceImpl implements CardService {
    final ConfigurableListableBeanFactory beanFactory;

    //代替循环依赖
    public CardDefineService getCardDefineService(){
        return beanFactory.getBean(CardDefineService.class);
    }
}
@Service
@RequiredArgsConstructor
public class CardDefineServiceImpl implements CardDefineService {
    final ConfigurableListableBeanFactory beanFactory;
    //代替循环依赖
    public CardService getCardService(){
        return beanFactory.getBean(CardService.class);
    }
}

使用的时候,我们直接调用get方法,就可以获取到对应的bean了,是不是很简单

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值