Spring 如何解决 Bean 循环依赖

循环依赖解释

bean A 创建时属性注入依赖bean B ,并且bean B创建时属性注入也依赖bean A ,造成 bean A 和bean B 都无法完成初始化问题,形成了闭环。

spring 如何解决循环依赖的?

使用三级缓存去解决的。三个Map
一级缓存 缓存的完整的bean
二级缓存
三级缓存 缓存的是函数接口:通过lambda 把方法传进去(把bean实例和bean名字传进去) (aop创建);不会立即调用。

SpringBoot2.6.0及以上 具体解决方案

最简单的方法在yaml或properties中配置spring.main.allow-circular-references=true 支持循环依赖即可

示例

TestBService 实现类 TestBServiceImpl 中 注入 TestService对象
TestService 实现类 TestServiceImpl 中注入 TestBService对象

@Service
public class TestBServiceImpl extends ServiceImpl<TestBMapper, TestB> 
implements TestBService {
    @Autowired
    private TestService testService;
}
@Service
public class TestServiceImpl extends ServiceImpl<TestAMapper, TestA> 
implements TestService {
    @Autowired
    private TestBService testBservice;
}

在 application.yml 中

spring:
  main:
    ## 支持循环依赖
    allow-circular-references: true

相关推荐

  1. Spring 如何解决 Bean 循环依赖

    2024-04-30 23:36:06       30 阅读
  2. 26、Spring如何解决Bean循环依赖

    2024-04-30 23:36:06       57 阅读
  3. Spring如何解决循环依赖

    2024-04-30 23:36:06       47 阅读
  4. Spring如何解决循环依赖

    2024-04-30 23:36:06       42 阅读
  5. Spring如何解决循环依赖

    2024-04-30 23:36:06       28 阅读
  6. Spring循环依赖问题如何解决

    2024-04-30 23:36:06       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-30 23:36:06       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-30 23:36:06       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-30 23:36:06       87 阅读
  4. Python语言-面向对象

    2024-04-30 23:36:06       96 阅读

热门阅读

  1. oracle regexp_replace的用法

    2024-04-30 23:36:06       31 阅读
  2. 制作和合入git补丁

    2024-04-30 23:36:06       28 阅读
  3. Go语言中如何实现协程同步

    2024-04-30 23:36:06       30 阅读
  4. 2 Spring IoC

    2024-04-30 23:36:06       27 阅读
  5. 01 C

    2024-04-30 23:36:06       27 阅读
  6. MySql 函数和表达式索引

    2024-04-30 23:36:06       33 阅读
  7. 【skynet】 网络编程之回显服务器

    2024-04-30 23:36:06       37 阅读