在 Java 的 Spring Boot 项目中,如果一个 Service 类引用了 @Autowired private SSHConnectionCache sshConnectionCache;,而 SSHConnectionCache 类又引用了 @Autowired private ConfigService configService;,就形成了循环依赖。在 Spring Boot 1.5.4 版本中,项目正常使用没有问题。但是当将 Spring Boot 升级到 2.7.14 版本后,项目启动报错,提示这两个类循环调用了。

这种循环依赖的情况在 Spring 中是不被支持的,因为它会导致 Bean 的初始化顺序问题。在 Spring 2.2 版本之前,Spring 会尝试解决这种循环依赖,但可能会导致一些潜在的问题。

从 Spring 2.2 版本开始,Spring 对循环依赖进行了一些改进,但仍然不建议在项目中使用循环依赖。如果你的代码中存在循环依赖,推荐尽量避免这种情况。

解决这个问题的一个方法是重新设计你的类之间的依赖关系,尽量避免循环依赖。你可以通过将某些方法提取到其他类中,或者使用事件驱动的方式解耦依赖关系。

如果你确实需要循环依赖,你可以尝试使用构造方法依赖注入代替字段注入(@Autowired 注解在字段上),这有助于解决循环依赖的问题。

另外,升级 Spring Boot 版本并不一定会解决循环依赖的问题,因为这是 Spring 框架本身的限制。在升级 Spring Boot 之前,建议先解决循环依赖的问题。

SpringBoot 升级后循环依赖报错:@Autowired 导致的初始化问题

原文地址: https://www.cveoy.top/t/topic/qev8 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录