没有新消息
更多内容
0 条评论
暂无评论,快来写下您的评论
问题来自于
淡忘如思
#今日面试题#Java面试题:Spring是如何解决循环依赖的?
一直没搞清楚这个问题,就知道一二三级缓存,不是特别的懂,求解答
5075
阅读
2
回答
@2024 职Q 智联招聘
合作商务邮箱:sbyh@zhaopin.com.cn
友情链接
HR圈内招聘/ 同道问答/ 人资知识社区
51社保/ X职场/ HR Bar/ 中人网/ 研招网
京ICP备17067871号 合字B2-20210134
京公网安备 11010502030147号
人力资源许可证:1101052003273号
网上有害信息举报专区
违法不良信息举报电话:400-885-9898
关爱未成年举报热线:400-885-9898-7
朝阳区人力资源与社会保障局 监督电话: 57596212,65090445
#今日面试题#Java面试题:Spring是如何解决循环依赖的?
Spring解决循环依赖问题主要依赖于它的三级缓存机制。 1. 第一级缓存:Spring的ApplicationContext启动时,会创建一个BeanDefinition对象,这个对象包含了所有的Bean定义信息。当Spring实例化Bean时,会先从第一级缓存中查找对应的BeanDefinition对象。 2. 第二级缓存:当Spring实例化Bean时,如果第一级缓存中没有找到对应的BeanDefinition对象,那么会从第二级缓存中查找。第二级缓存中存放的是已经创建好的单例Bean实例。 3. 第三级缓存:如果第二级缓存中也没有找到对应的Bean实例,那么Spring会尝试从第三级缓存中查找。第三级缓存中存放的是原始的Bean对象,而不是完全组装好的Bean实例。 当出现循环依赖时,Spring会利用这三级缓存来解决。具体来说,当Spring尝试实例化A和B两个Bean时,如果A依赖B,而B又依赖A,那么Spring会先从第二级和第三级缓存中查找对应的Bean实例。如果找到了,那么就直接使用这些实例;如果没有找到,那么Spring会尝试先实例化其中一个Bean(例如A),并将这个Bean的实例存入第二级和第三级缓存中。然后,Spring会再次尝试实例化另一个Bean(例如B),此时由于已经有了A的实例,所以B的实例化就可以正常完成,并将B的实例存入第二级和第三级缓存中。最后,Spring再回到A的实例化,由于有了B的实例,所以A的实例化也可以正常完成。 通过这种方式,Spring避免了循环依赖导致的Bean实例化失败问题。同时,由于Spring的缓存机制,循环依赖问题也不会导致大量的重复实例化操作,从而提高了程序的性能。