سؤال

وأريد استخدامAutoWired لحقن الفول غير المدارة تكوينه معComponent إلى حبة إدارتها. أنا متأكد لدي الحق التكوين، ولكن لسبب وأظل الحصول على استثناء:

No unique bean of type [foo.Baz] is defined: Unsatisfied dependency of type [class foo.Baz]: expected at least 1 matching bean

واستنادا إلى خطأ، وأنا على التخمين انها ليست قادرة على العثور على الطبقة باز، ولكن لست متأكدا لماذا. انها فهمي أن السياق: عنصر تكوين الربيع في التكوين XML كان من المفترض أن تسمح لي أن أفعل ذلك. كما أنني حرصت على تضمين الملفات جرة المناسبة (الربيع weaving.jar وaspectjweaver.jar).

وهنا مثال بسيط من بلدي الإعداد.

وبلدي XML التكوين:

<beans ...>
    ...

    <context:annotation-config/>
    <context:spring-configured/>
    <context:component-scan base-package="foo"/>

    <bean id="bar" class="foo.Bar"/>
    ...
</beans>

وأنا واحد فول تمكن:

package foo;

public class Bar {

    @Autowired
    private Baz baz;

    public void setBaz(Baz baz) {
        this.baz = baz;
    }

    ...
}

واحد فول غير المدارة:

package foo;

@Component
public class Baz {
    ...
}

هل هناك شيء أنا في عداد المفقودين؟

تحرير : سجل يسرد الفول instantiating لها، وfoo.Baz ليست واحدة منها. أنا لا أعرف لماذا انها ليست التقاط الطبقة المشروحComponent.

هل كانت مفيدة؟

المحلول

ولأن تكوين بار مع أكس، يمكن تكوينه فقط مع XML. أي لا يمكنك مزجها. لذلك لم يتم الحصول على اختار أن "Autowired" الشرح على الباز حتى (لا شيء من شروح أن يكون). أنها ليست سوى عند إضافة الشرح الربيع على مستوى الفئة التي الربيع يستمع إلى أي من الشروح الأخرى.

ما عليك القيام به هو في أكس تكوين الحبة إلى أن autowired حسب النوع، إضافة اضع لهذا النوع، وعليك تحقيق السلوك المطلوب.

<bean id="bar" class="foo.Bar" autowire="byType"/>

وأكثر شيء واحد، عند تعليم والفول معComponent عليه <م> هو الربيع إدارة الفول. فقط لأنه لم يتم إنشاؤها باستخدام XML لا يعني أنها غير المدارة. والفول غير المدارة هو واحد لم تحصل من الربيع.

وبار وباز كلاهما الربيع إدارتها. وتعتبر آلية اخترت تحدد لهم أن يختلف.

نصائح أخرى

والاستجابة السابقة غير صحيحة، في جانب واحد. يمكنك autowire الفاصوليا التي تم تكوينها على خلاف ذلك مع أكس.

ومن القسم 3.4.5 في http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html :

عند استخدام المستندة إلى XML التكوين الفوقية [2]، يمكنك تحديد autowire وضع لتعريف الفول مع السمة autowire العنصر. وظائف autowiring من خمسة وسائط. قمت بتحديد autowiring في الفول، وبالتالي يمكن اختيار أي منها لautowire.

ويمكنك autowire بالاسم ونوع والبناء. هناك مثال الخام من هذا هنا: http://www.java2s.com/ الرمز / جافا / الربيع / AutoWiring.htm

ويرجع ذلك إلى سلسلة من الفاصوليا المحددة في ملف التكوين XML الخاصة بك الخطأ.

وكما حدث في ملف XML الخاصة بك، يتم إنشاء الفاصوليا لbar أولا ثم حبوبهم تعتمد نتيجة التي @Autowired ليست قادرة على إيجاد baz.

ويجب عليك أولا أن يعلن الفول لbaz ثم لbar.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top