การพึ่งพาแบบวงกลม
คำจำกัดความ: การพึ่งพาแบบวงกลมเป็นการอ้างอิงแบบวงกลมซึ่งหมายถึงถั่วสองตัวขึ้นไปถือกันตัวอย่างเช่น circularitya หมายถึง circularityb, circularityb หมายถึง circularityc และ circularityc หมายถึง circularitya สร้างความสัมพันธ์อ้างอิงแบบวงกลม
เมื่อใช้สปริงหากคุณใช้วิธีการฉีดพึ่งพาตัวสร้างขึ้นมาเป็นหลักคุณอาจพบกับการพึ่งพาแบบวงกลม ในระยะสั้นตัวสร้างถั่ว A ขึ้นอยู่กับถั่ว B และตัวสร้างถั่ว B ขึ้นอยู่กับถั่ว A. ในกรณีนี้ฤดูใบไม้ผลินี้จะโยน beancurrentlyincreationexception ณ เวลาคอมไพล์
คลาส A
@ComponentPublic Classa classa {private classb classb; @AutoWired Public Classa (classb classb) {this.classb = classb; } โมฆะสาธารณะ printclass () {system.out.println ("class a =" + this); System.out.println ("class b =" + classb); -คลาส B
@componentpublic classb {private classa classa; @AutoWired Public ClassB (classa classa) {this.classa = classa; } โมฆะสาธารณะ printclass () {system.out.println ("class a =" + classa); System.out.println ("class b =" + this); -ทดสอบ
@ContextConfiguration (classes = {classa.class, classb.class}) @runwith (springrunner.class) คลาสสาธารณะ mytest {@autowired ส่วนตัว Classa classa; @autowired classb classb; @Test ชื่อโมฆะสาธารณะ () {classa.printclass (); classb.printclass (); -เหตุผล
ในเวลานี้คุณจะพบว่ามีการโยนข้อยกเว้นของ beancurrentlyincreationException เหตุผลนี้คือเมื่อฤดูใบไม้ผลิสร้างถั่วมันจะยกตัวอย่างวัตถุก่อนแล้วฉีดการพึ่งพา สมมติว่าฤดูใบไม้ผลิสร้างคลาส A ก่อนจากนั้นจะพบว่ามีการพึ่งพาคลาส B ในตัวสร้างดังนั้นมันจะเปลี่ยนเป็นคลาส B จากนั้นค้นหาการพึ่งพาคลาส A ในคอนสตรัคเตอร์ของคลาส B ในเวลานี้คลาส A ไม่ได้เริ่มต้น
สารละลาย
การเปลี่ยนไปใช้การฉีดขึ้นอยู่กับการพึ่งพาผู้ติดตั้งสามารถแก้ปัญหานี้ได้ เนื่องจากการฉีดขึ้นอยู่กับการพึ่งพาผู้ติดตั้งจะเรียกตัวสร้างเริ่มต้นก่อนเพื่อสร้างอินสแตนซ์วัตถุจากนั้นเรียก Setter เพื่อใช้การฉีดพึ่งพา ด้วยวิธีนี้ไม่มีการพึ่งพาในขั้นตอนการสร้างอินสแตนซ์ของวัตถุ ดังนั้นหลังจากคลาส A เป็นอินสแตนซ์คลาส B จึงเรียกว่าและหลังคลาส B จะเป็นอินสแตนซ์มันจะเริ่มตั้งค่า ในเวลานี้ Class A ได้รับการสร้างอินสแตนซ์แล้วดังนั้นจึงสามารถอ้างถึงคลาส A ได้สำเร็จ
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะมีค่าอ้างอิงบางอย่างสำหรับการศึกษาหรือที่ทำงานของทุกคน หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร ขอบคุณสำหรับการสนับสนุน Wulin.com