【循环依赖(Circular Dependency)】
问题分析
-
循环依赖链
:
BigFilesController
依赖MediaFileServiceImpl
(通过构造函数注入)。MediaFileServiceImpl
又依赖某个 Bean(可能是自身或其他 Bean),导致循环。
-
错误日志关键信息
:
The dependencies of some of the beans in the application context form a cycle:bigFilesController┌─────┐| mediaFileServiceImpl└─────┘
- 这表明
BigFilesController
和MediaFileServiceImpl
之间存在直接或间接的相互依赖。
- 这表明
解决方案
1. 检查代码中的依赖关系
Controller 通常只依赖 Service,反之则不合理)。
2. 重构代码消除循环依赖
方法 1:移除 Service 对 Controller 的依赖
方法 2:使用 @Lazy
延迟加载
方法 3:Setter/Field 注入替代构造函数注入
Spring 默认支持三级缓存解决循环依赖,但构造函数注入会绕过这一机制。改用 Setter 或 Field 注入
3. 检查间接依赖
- 如果循环依赖是通过其他 Bean 间接引起的(例如
MediaFileServiceImpl
依赖A
,而A
又依赖BigFilesController
),需要重构整个依赖链。