التبعية الدائرية
التعريف: الاعتماد الدائري هو مرجع دائري ، مما يعني أن الفاصوليا أو أكثر تمسكان بعضهما البعض ، على سبيل المثال ، يشير الدائرة إلى الدائرة ، ويشير الدائرة B إلى الدائرة ، ويشير الدائرة إلى الدائرة. تشكيل علاقة مرجعية دائرية.
عند استخدام الربيع ، إذا كنت تستخدم بشكل أساسي طريقة حقن التبعية المستندة إلى المنشئ ، فقد تواجه تبعيات دائرية. باختصار ، يعتمد مُنشئ Bean A على Bean B ، ويعتمد منشئ Bean B على Bean A. في هذه الحالة ، سوف يرمي الربيع beancurterctionexception في وقت الترجمة.
الفئة أ
classa classa {private classb classb ؛ Autowired public classa (classb classb) {this.classb = classb ؛ } public void printclass () {system.out.println ("class a =" + this) ؛ system.out.println ("class b =" + classb) ؛ }}الفئة ب
ComponentPublic ClassB {private classa classa ؛ @autowired public classb (classa classa) {this.classa = classa ؛ } public void printclass () {system.out.println ("class a =" + classa) ؛ system.out.println ("class b =" + this) ؛ }}امتحان
contextConfiguration (classes = {classa.class ، classb.class}) @runwith (springRunner.Class) الفئة العامة mytest {autowired private classa ؛ Autowired private classb classb ؛ Test public void name () {classa.printclass () ؛ classb.printclass () ؛ }}سبب
في هذا الوقت ، ستجد أن استثناء BeanCurterlyIncreationException يتم طرحه. والسبب في ذلك هو أنه عندما ينشئ الربيع حبة ، فإنه سيؤدي إلى إنشاء كائن أولاً ثم حقن التبعية. لنفترض أن Spring ينشئ الفئة A أولاً ، ثم ستجد أن هناك تبعية من الفئة B في المنشئ ، لذلك سوف يتحول إلى إنشاء الفئة B ، ثم العثور على التبعية على الفئة A في مُنشئ الفئة B. في هذا الوقت ، لم يتم تهيئة الفئة A ، لذلك ستتحول إلى إنشاء فئة A ، والتي ستنطلق في حلقة ميتة.
حل
يمكن أن يؤدي التحول إلى حقن التبعية المستندة إلى Setter إلى حل هذه المشكلة. نظرًا لأن حقن التبعية المستندة إلى Setter سيتصل أولاً بالمشارك الافتراضي لإنشاء إنشاء الكائن ، ثم اتصل على Setter لتنفيذ حقن التبعية. وبهذه الطريقة ، لا يوجد أي تبعية في مرحلة التثبيت للكائن. لذلك ، بعد إنشاء فئة A ، يتم استدعاء الفئة B ، وبعد إنشاء الفئة B ، يبدأ في تعيين القيم. في هذا الوقت ، تم بالفعل إنشاء مثيل له من الفئة A ، بحيث يمكنه الرجوع بنجاح إلى الفئة A.
لخص
ما سبق هو المحتوى الكامل لهذه المقالة. آمل أن يكون لمحتوى هذه المقالة قيمة مرجعية معينة لدراسة أو عمل الجميع. إذا كان لديك أي أسئلة ، فيمكنك ترك رسالة للتواصل. شكرا لك على دعمك إلى wulin.com.