温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Spring循环依赖原理实例分析

发布时间:2022-07-11 10:11:05 来源:亿速云 阅读:193 作者:iii 栏目:开发技术

本篇内容介绍了“Spring循环依赖原理实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

简介

概述

@Autowired进行属性注入可以解决循环依赖。原理是:Spring控制了bean的生命周期,先实例化bean,后注入bean的属性。Spring中记录了正在创建中的bean(已经实例化但还没初始化完毕的bean),所以可以在注入属性时,从记录的bean中取依赖的对象。

相对而言,单纯使用构造器注入就无法解决循环依赖。因为,在构造时就需要传入依赖的对象,导致无法实例化。(注意:构造器注入可以使用@Lazy解决循环依赖,在实例化时,传入代理对象,真正使用时才会生成真正的对象)

循环依赖实例

代码

package com.example.tmp;   import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component;   @Component public class A {     @Autowired     private B b;       private String name = "Tony";       public String getName() {         return name;     }       public void setName(String name) {         this.name = name;     }       public String getTest() {         return b.getAge().toString() + name;     } }
package com.example.tmp;   import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component;   @Component public class B {     @Autowired     private A a;       private Integer age = 20;       public Integer getAge() {         return age;     }       public void setAge(Integer age) {         this.age = age;     } }
package com.example.controller;   import com.example.tmp.A; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;   @RestController public class HelloController {     @Autowired     private A a;       @GetMapping("/test1")     public String test1() {         return a.getTest();     } }

测试

1.启动不报错。

2.postman访问:http://localhost:8080/test1

后端结果:不报错

postman结果: 20Tony

“Spring循环依赖原理实例分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI