spring中如何@Autowired注入导致的循环依赖
时间: 2024-02-09 10:56:46 浏览: 92
Intellij IDEA如何去掉@Autowired 注入警告的方法
循环依赖指两个或多个Bean互相依赖,形成环状依赖,无法完成初始化的情况。在Spring中,使用@Autowired注入依赖时,如果存在循环依赖,Spring则无法正确地完成Bean的初始化。
为了解决这个问题,Spring采用了三级缓存机制。当发现两个Bean互相依赖时,Spring将其中一个Bean的引用放到第一级缓存中,然后继续初始化其他的Bean。当第二个Bean需要注入这个Bean时,Spring会在第一级缓存中查找,如果找到了就返回引用。如果没有找到,就将该Bean的一些信息放到第二级缓存中,并返回一个代理对象。当第一个Bean需要注入第二个Bean时,Spring会在第二级缓存中查找,如果找到了代理对象,就创建一个真正的Bean,并将其放到第三级缓存中,并更新代理对象的引用。最后,Spring会将第三级缓存中的Bean注入到第二级缓存中的代理对象中。
所以,当产生循环依赖时,Spring通过三级缓存机制解决了这个问题。但是,这种机制可能会带来一些性能上的损耗。因此,为了避免循环依赖的产生,我们应该尽量避免Bean之间的互相依赖,并且尽量将Bean的依赖关系控制在单向依赖的范围内。
阅读全文