Spring怎么解决循环依赖

先说说什么是循环依赖,在spring中,循环依赖是指两个或多个Bean之间相互引用,形成一个循环的依赖关系,项目启动时,就会报错导致项目无法启动。

Spring解决循环依赖的步骤:使用Spring称为"三级缓存"的一种机制,来解决循环依赖问题

  1. 首先,当容器创建一个Bean时,它会将正在创建的Bean放入"早期对象集合"(Early Objects)中,同时将正在创建的Bean放入"当前创建Bean的缓存"(Currently created Beans Cache)中。

  2. 接着,Spring会处理该Bean的依赖项。如果发现依赖项也是正在创建的Bean,则Spring会从"早期对象集合"中获取该Bean,而不是等待该Bean被完全创建。

  3. 如果依赖项是原型作用域的Bean,则Spring会创建一个代理对象,以避免循环依赖。

  4. 一旦Bean创建完成,Spring将其放入"已完成对象集合"(Finished Beans)中,并从"当前创建Bean的缓存"中移除。

代码示例(仅供参考):

创建一个用户server类

@Service

public class MemberService {

        public static MemberService instance(){

                return SpringUtils.getBean(MemberService.class);

        } 

        

        public Member test(String memberSn){

                 ----查询方法省略

                return merber;

        }      

}

然后创建自定义的SpringUtils类

import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
public final class SpringUtils implements BeanFactoryPostProcessor{
    private static ConfigurableListableBeanFactory beanFactory;
    public static <T> T getBean(Class<T> clz) throws BeansException {
        return beanFactory.getBean(clz);
    } 
}

使用方法: 比如OrderService 需要依赖MemberService

@Service

public class OrderService {

        

        public void test(){

                Member member =  MemberService.instance.test(memberSn);

                

        }        

}

      使用时不注入,直接调用MemberService.instance 获取到bean

总结: 需要注意的是,尽管Spring提供了解决循环依赖的机制,但仍然建议尽量避免循环依赖的情况。因为循环依赖可能导致代码的可读性和可维护性下降,同时也增加了调试和排查问题的难度。如果可能的话,应该重构代码以消除循环依赖

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值