国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

JAVA,循環依賴,Spring

2019-11-06 07:11:11
字體:
來源:轉載
供稿:網友

最近看到一個問題:如果有兩個類A和B,A類中有一個B的對象b,B類中有一個A的對象a,那么如何解決這兩個類的相互依賴關系呢?

示例代碼1

1234567891011121314151617181920212223242526272829303132333435public class  Test{    public static void main(String[] args) {        B testb = new B();    }} class A{    public B b;    public A (){        b = new B();    }    public void PRintB(){        System.out.println("Ab");        b.printA();    }         public void printA(){        System.out.println("AA");    }   } class B{    public A a;    public B (){        a = new A();    }    public void printB(){        System.out.println("BB");        a.printA();    }         public void printA(){        a.printA();    }   }

可以看到A類的構造方法中,new了一個B的對象,同時B類的構造方法中,new了一個A的對象。

如果此時我們運行該類的話,會報如下錯誤:

Exception in thread "main" java.lang.StackOverflowError

問題出現的原因在于A類和B類之間出現了循環依賴。

那么是否有方法可以解決這個問題呢?答案是:有

示例代碼2:

12345678910111213141516171819202122232425262728293031323334353637383940public class  Test{    public static void main(String[] args) {        A testa = new A();        B testb = new B();        testa.b = testb;        testb.a = testa;        testa.printB();        testb.printA();        testa.print();        testb.print();    }} class A{    public B b;    public void printB(){        b.printB();    }         public void printA(){        System.out.println("AA");    }         public void print(){        b.printA();    }    }class B{    public A a;    public void printB(){              System.out.println("BB");    }         public void printA(){        a.printA();    }    public void print(){        a.printB();    }    }

運行代碼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中也是通過依賴注入的方法來解決類的相互依賴問題。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汪清县| 南丹县| 天气| 杂多县| 宣武区| 福海县| 罗甸县| 金山区| 丰城市| 黔江区| 石屏县| 渭南市| 宁远县| 城口县| 临桂县| 德州市| 获嘉县| 辽宁省| 喀喇沁旗| 林甸县| 新闻| 玉山县| 庆元县| 巴马| 虎林市| 惠州市| 广西| 鹿邑县| 正定县| 惠州市| 盐津县| 大同市| 阿拉善盟| 红安县| 抚顺市| 铁力市| 小金县| 南宁市| 临朐县| 延长县| 青冈县|