我查看了 StackOverflow 上的其他类似问题,但没有找到任何有效的答案。我正在更新一个旧的 Spring boot 应用程序,该应用程序工作正常,但是当将其更新到 2.7.18 时,它抱怨循环依赖。
原始代码可以在 Github 上找到: https://github.com/SabreDevStudio/SACS-Java/blob/dependabot/maven/org.springframework-spring-core-5.2.24.RELEASE/README.md
我已经成功修复了一个问题,但是我陷入了更复杂的 A -> B -> C 到 A 的循环依赖关系。以下是导致循环依赖的 3 段代码:
@Service
public class SessionPool {
@Controller
@Scope("prototype")
public class SessionCreateWrapper extends WebServiceGatewaySupport {
@Component
@Scope("prototype")
public class SessionCreateInterceptor extends AbstractSessionInterceptor {
我尝试创建一个会话管理器界面来解耦依赖关系
public interface SessionManager {
void addToPool(Security session);
Security getFromPool(SharedContext context);
}
在SessionPool中实现SessionManager接口 所以SessionCreateWrapper依赖于SessionManager SessionCreateInterceptor 实现 SessionManager
But then I get this error:
Parameter 0 of constructor in com.sabre.api.sacs.soap.session.SessionCreateWrapper required a single bean, but 2 were found:
- sessionCreateInterceptor: defined in file [C:\CODE\SACS-Java\soap\target\classes\com\sabre\api\sacs\soap\interceptor\SessionCreateInterceptor.class]
- sessionPool: defined in file [C:\CODE\SACS-Java\soap\target\classes\com\sabre\api\sacs\soap\pool\SessionPool.class]
我也尝试过使用 setter 注入,但这只是改变了循环依赖。错误是:
workflowTrigger (field private com.sabre.api.sacs.soap.pool.SessionPool com.sabre.api.sacs.flowtrigger.WorkflowTrigger.sessionPool)
┌─────┐
| sessionPool
└─────┘
当然,如果我使用 spring.main.allow-circular-references=true ,代码就可以工作,但我不想按照建议使用它。请帮忙!