@Lazy 注解为啥就能破解死循环?
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
松哥在最新的文章中讨论了Spring中的循环依赖问题,并提供了使用@Lazy
注解作为解决方案的详细解析。文章首先明确了,并非所有的循环依赖都能被Spring自动解决。在构造器中互相注入的Bean会导致死循环,但Spring通过@Lazy
注解能暂时解开这个死结。
1. @Lazy
注解的应用
通过在服务类的构造方法上添加@Lazy
注解,可以避免启动时的错误,但是这会导致注入的Bean实际上是代理对象而非原始对象。使用@Lazy
注解的对象在需要时才会加载,而Spring内部会生成该对象的代理。该技术同样可以解决@Scope("prototype")
和@Async
注解导致的循环依赖问题。
2. @Lazy
注解原理分析
文章接着分析了@Lazy
注解的源码流程,详细解释了在属性注入过程中如何处理延迟加载。在创建Bean时,会调用populateBean
方法填充属性,继而执行后置处理器。如果属性注入需要,resolveDependency
方法会通过getLazyResolutionProxyIfNecessary
判断是否创建代理对象,若需要则通过buildLazyResolutionProxy
方法生成代理,延迟实际对象的加载。
最后,松哥提醒开发者,虽然@Lazy
注解可以解决循环依赖,但在实际开发中应尽量避免这种依赖关系。
此外,松哥宣布TienChin视频项目已完结,该项目使用了Spring Boot和Vue3技术栈,并邀请小伙伴们一起加入完成一个高完成率的项目。
想要了解更多内容?