开发者社区 问答 正文

如何解决Spring Bean的循环依赖?

如何解决Spring Bean的循环依赖?

展开
收起
gxx1 2022-04-01 02:41:19 756 分享 版权
1 条回答
写回答
取消 提交回答
  • Spring为了解决循环依赖,设置了三级缓存。

    一级缓存singletonObjects

    用于保存BeanName和创建bean实例之间的关系,beanName -> bean instance

    private final Map<String, Object> singletonObjects = new ConcurrentHashMap(256);

    二级缓存earlySingletonObjects

    保存提前曝光的单例bean对象

    private final Map<String, Object> earlySingletonObjects = new HashMap<>(16);

    三级缓存singletonFactories

    保存beanName和创建bean实例之间的关系。但是,bean在创建过程中,可以通过getBean方法获取到,是为了检测循环引用。

    通过上述的三种方法就可以解决spring的循环依赖,我们可以根据其进行应用。

    2022-04-01 02:42:27
    赞同 展开评论