美文网首页
Spring经典函数收集:递归调用

Spring经典函数收集:递归调用

作者: 码而优则仕 | 来源:发表于2020-05-11 20:01 被阅读0次

Spring经典函数收集:递归调用

protected boolean isDependent(String beanName, String dependentBeanName) {
        synchronized (this.dependentBeanMap) {
            return isDependent(beanName, dependentBeanName, null);
        }
    }

    // A-[1,2,3,4],1->[a,b,c,d],2->[q,w,r]....
    //第一次调用 检查A->[1,2,3,4]
    //第一次,一层检查没有循环依赖,则检查 A依赖的每个 bean的依赖集合
    //循环,递归 1->[a,b,c,d] 直到全部检查完毕
    //alreadySeen 存放已经检查过的和当前 bean不循环依赖的bean集合
    private boolean isDependent(String beanName, String dependentBeanName, @Nullable Set<String> alreadySeen) {
        if (alreadySeen != null && alreadySeen.contains(beanName)) {
            return false;
        }
        //处理多重别名
        String canonicalName = canonicalName(beanName);
        //获取当前bean依赖的所有bean名称集合
        Set<String> dependentBeans = this.dependentBeanMap.get(canonicalName);
        if (dependentBeans == null) {
            return false;
        }
        //当前bean 依赖的bean中包含当前bean就是循环依赖
        if (dependentBeans.contains(dependentBeanName)) {
            return true;
        }
        //循环检查当前 bean依赖的 bean集合中的每个 bean依赖的bean集合 是否和当前bean循环依赖
        for (String transitiveDependency : dependentBeans) {
            if (alreadySeen == null) {
                alreadySeen = new HashSet<>();
            }
            alreadySeen.add(beanName);
            //递归调用检查循环依赖
            if (isDependent(transitiveDependency, dependentBeanName, alreadySeen)) {
                return true;
            }
        }
        return false;
    }

相关文章

  • Spring经典函数收集:递归调用

    Spring经典函数收集:递归调用

  • 029_wz_hm_函数的递归

    函数的递归 函数调用自身的编程技巧成为递归 递归函数的特点 特点: 一个函数内部调用自己 函数内部可以调用其他函数...

  • [每天进步一点点~] 递归与闭包

    1.递归 【定义】:在自己函数的内部调用自己(自己调用自己) (函数自调用) 。递归函数 简单举例?: 阶乘的递归...

  • 递归调用

    什么是递归调用 递归调用就是在本函数中连续不断地对自身函数进行调用。 递归调用注意点 递归调用函数要有明确的某一或...

  • 递归,回溯

    什么叫递归:函数在运行时调用自己,这个函数就叫递归函数,调用的过程叫做递归; 递归的特点:1、递归函数必须要有终止...

  • 关于原生js-递归

    递归函数---在函数内部间接或直接自己调用自己 递归又分为直接递归或者间接递归 直接递归指在函数中自己调用自己 间...

  • 单信js——4难点部分

    递归: 递归函数是指在函数内部调用函数自身。注意:递归的出口:什么情况下结束调用递归的入口:什么情况下调用自已 /...

  • 复习笔记之函数进阶(2)

    递归 如果一个函数在内部可以调用其本身,那么这个函数就是递归函数简单理解:函数内部自己调用自己就是递归函数(递归函...

  • 深刻理解递归———通过栈图来理解

    函数调用另外一个函数是合法的;函数调用自己也是合法的。调用自己的过程称为递归函数,这个执行过程叫做递归。 递归在数...

  • 递归函数

    1.递归函数概述及用法 一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数。C语言允许函数 的递归...

网友评论

      本文标题:Spring经典函数收集:递归调用

      本文链接:https://www.haomeiwen.com/subject/ijupnhtx.html