Class CircularDependencyChecker
java.lang.Object
cool.scx.bean.dependency.CircularDependencyChecker
循环依赖检测器, 负责检测并处理循环依赖链条。
为了确保循环依赖的检测正确性,设计上假设:
【DependencyContext 幂等性假设】
- 在同一条依赖链(CURRENT_DEPENDENCY_CHAIN)内, 如果出现相同的 beanClass(即类对象)多次, 则这些 DependencyContext 实例的关键属性(singleton、type 等) 必然一致。
该假设基于以下设计保证:
- 依赖链是线性推进的,每次依赖的创建都是按照顺序发生的,不会跳跃或分支。
- 每个 DependencyContext 实例在第一次创建时即被固定下来,并且不会发生变化。
- 使用 ThreadLocal 确保每个线程的依赖链独立,避免线程间相互干扰。
在此假设下,我们可以简单地从创建链中提取循环依赖的子链,而无需手动添加当前依赖的 context。
⚠️ 请注意,未来引入更复杂的功能(如动态 Scope、并发构建等)时, 需要重新评估此假设是否仍然有效。
- Version:
- 0.0.1
- Author:
- scx567888
-
Nested Class Summary
Nested Classes -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic voidstatic List<DependencyContext> extractCircularDependencyChain(List<DependencyContext> creatingList, Class<?> beanClass) static intfindCycleStartIndex(List<DependencyContext> creatingList, Class<?> beanClass) static List<DependencyContext> 获取依赖链条isUnsolvableCycle(List<DependencyContext> circularDependencyChain) 是否是无法解决的循环static voidstartDependencyCheck(DependencyContext dependentContext)
-
Constructor Details
-
CircularDependencyChecker
public CircularDependencyChecker()
-
-
Method Details
-
startDependencyCheck
public static void startDependencyCheck(DependencyContext dependentContext) throws BeanCreationException - Throws:
BeanCreationException
-
endDependencyCheck
public static void endDependencyCheck() -
getCurrentDependencyChain
获取依赖链条 -
extractCircularDependencyChain
public static List<DependencyContext> extractCircularDependencyChain(List<DependencyContext> creatingList, Class<?> beanClass) -
findCycleStartIndex
-
isUnsolvableCycle
public static CircularDependencyChecker.UnsolvableCycleType isUnsolvableCycle(List<DependencyContext> circularDependencyChain) 是否是无法解决的循环
-