赞
踩
Spring可以通过以下方法来避免循环依赖:
构造函数注入:使用构造函数注入来注入依赖项,这是一种比较安全的方式,因为在对象创建时就会注入依赖项,可以避免循环依赖。
Setter方法注入:使用Setter方法注入依赖项,Spring会在对象创建后调用Setter方法来注入依赖项,这种方式也可以避免循环依赖。
使用@Lazy注解:使用@Lazy注解来延迟依赖项的注入,这样可以避免循环依赖。
使用@DependsOn注解:使用@DependsOn注解来指定bean创建的顺序,可以避免循环依赖。
使用 @Lookup 注解: 在这种情况下,Spring 容器会在每次调用 @Lookup 注解修饰的方法时,返回一个新的 bean 实例。这样,就可以确保两个 bean 之间没有直接的依赖关系。
spring自带的三级缓存【使用代理】: (默认)使用 AOP 代理来实现 bean 之间的依赖关系。在编译时就解决循环依赖问题。
循环依赖过程分析
这里还有个知识点:
在有循环依赖的情况下:(A --> B --> A 的场景)
A 第一次加载时,会将 A 对应的 ObjectFactory 放到三级缓存中;
当 B 创建完实例后,进行 populateBean 填充依赖时,会通过 getBean(A) 来获取 bean A,这时会使用 A 对应的三级缓存 ObjectFactory 来获取 bean A 的早期引用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。