|
|
有情有义的山羊 · 【sprinb-boot】排除/不加载某些B ...· 1 年前 · |
|
|
独立的鸵鸟 · java 版本EChart使用 - 烟火_ ...· 1 年前 · |
|
|
温文尔雅的茴香 · shell for 循环 curl-掘金· 2 年前 · |
|
|
善良的水煮鱼 · 财务自动化利器-从VBA到d3js - 知乎· 3 年前 · |
大家好,今天周三了,不得不说时间过得飞快,一天一天过去就像流过的河水,永远不会倒流,只有抓住现在宝贵的时间擦能让以后不留遗憾,最近看到一个问题:如果有两个类A和B,A类中有一个B的对象b,B类中有一个A的对象a,那么如何解决这两个类的相互依赖关系呢,几天就给大家说一下Java的循环依赖,raksmart服务器。
举个栗子1:
可以看到A类的构造方法中,new了一个B的对象,同时B类的构造方法中,new了一个A的对象。
如果此时我们运行该类的话,会报如下错误:
Exception in thread "main" java.lang.StackOverflowError
问题出现的原因在于A类和B类之间出现了循环依赖。
那么是否有方法可以解决这个问题呢?答案是:有
举个栗子2:
运行例子2,运行结果为:
BB
AA
AA
BB
在例子2中,testa和testb创建时调用的是类A和类B的默认构造方法,创建了类A和类B的实例。
然后将B的实例注入到类A中。testa.b = testb;
将A的实例注入到类B中。testb.a = testa;
testa.print()调用b.printA();b.printA()调用a.printA();a.printA()显示结果为AA
我们通过属性注入的方法,使得类A和类B不在出现例子1中的错误,并且使得两个相互依赖的类A和B可以调用相互依赖的方法。
事实上,spring中也是通过依赖注入的方法来解决类的相互依赖问题,到了这里大家应该明白了怎么解决这个循环依赖的问题,希望能够帮到大家,那么,明天见!
Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
扫码关注腾讯云开发者
领取腾讯云代金券
|
|
独立的鸵鸟 · java 版本EChart使用 - 烟火_ - 博客园 1 年前 |
|
|
温文尔雅的茴香 · shell for 循环 curl-掘金 2 年前 |
|
|
善良的水煮鱼 · 财务自动化利器-从VBA到d3js - 知乎 3 年前 |