1.背景
起因是同事在测试环境启动项目时日志报了个循环依赖的错误,日志提示类A和类B发生了循环依赖。
2.排查
但是经过代码排查,发现这两个类之间并没有循环依赖的关系。随后重启项目后并没有此类情况发生。但是后面在构建项目的时候,此类情况会偶然出现。
到了发版的日期,同事将此情况汇报给了组长,没想到才没过一会儿,组长就发现代码中确实有循环依赖,只不过该循环依赖存在于3个类之间,也就是A->B->C->A。查看代码发现,也确实是同事新写的代码的问题。在同事修改代码之前,类的关系是B->C->A,然后同事后面又在A中引入了B,所以引发了循环依赖。
3.偶然出现循环依赖的原因
至于项目启动偶然才出现循环依赖的问题,这应该和类的加载顺序有关,因为spring在默认情况下不保证bean的加载顺序。