在启动一个公司老的项目中,发现这个项目的代码出现循环依赖且是偶发的,其中注入bean的方式多采用属性注入和@RequiredArgsConstructor(lombok提供的注入方式)
1.出现循环依赖场景
都采用@RequiredArgsConstructor

结论:这里出现A和B相互依赖的场景,因为是采用@RequiredArgsConstructor,会给private final修饰的类自动生成构造器注入,而spring解决不了构造器注入的循环依赖场景,所以发生循环依赖
2.不一定会出现循环依赖场景
@RequiredArgsConstructor 和 属性注入 一起用
1.启动不了

2.启动成功

1场景下:先用构造方法创建A,发现需要B,B为空,构造方法创建A失败,直接报错循环依赖
2场景下:先用属性注入B,B找不到,会继续去创建A,走A的构造时,发现需要B,但是B这时候已经通过自己的无参构造去创建了,因为A可以创建成功,B也就成功了
结论,成功与否,还是取决于注入方式
1.@RequiredArgsConstructor 慎用,除非项目中不允许出现循环依赖的场景
1.@RequiredArgsConstructor 和属性注入不要混着用,容易导致循环依赖的发生