在 Spring 框架中,allowCircularReferences 属性是用于控制 Bean 之间的循环依赖的。循环依赖是指两个或多个 Bean 之间相互依赖的情况,其中一个 Bean 依赖于另一个 Bean,同时另一个 Bean 又依赖于第一个Bean

allowCircularReferences 属性默认是关闭的,即不允许循环依赖存在。如果两个或多个 Bean 之间存在循环依赖,Spring 会抛出 BeanCurrentlyInCreationException 异常,以避免可能出现的死循环和性能问题

Relying upon circular references is discouraged and they are prohibited by default.
Update your application to remove the dependency cycle between beans.
As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

默认情况下,Spring 不允许循环依赖,如果存在循环依赖,会抛出 BeanCurrentlyInCreationException 异常。这是因为 Spring 默认使用构造函数注入或者 setter 注入的方式创建 Bean,如果两个 Bean 之间存在循环依赖,则无法满足其中一个 Bean 的创建要求。而有的时候我们想在测试的时候用一下这个 Bean 可以在配置文件中添加如下配置:

1
2
3
spring:
main:
allow-circular-references: true

这将启用 Spring 框架中默认的循环依赖解决方案,即使用代理对象来解决循环依赖问题。需要注意的是,开启循环依赖并不代表完全避免了循环依赖的问题