Konstruktorinjektion mit der Spring-Annotation @Autowired funktioniert nicht

8

Ich habe 2 einfache Klassen erstellt. Der Konstruktor einer Klasse ist mit @Autowired gekennzeichnet. Es akzeptiert das Objekt einer anderen Klasse. Aber dieser Code schlägt fehl.

Klassen: - 1) SimpleBean.java

%Vor%

2) Inner.java

%Vor%

Wenn ich versuche, ApplicationConext zu laden

%Vor%

Es gibt folgenden Fehler: -

%Vor%

Wenn ich in der SimpleBean-Klasse den Konstruktor no-arg einführe. Es gibt keinen Fehler. Aber das gibt mir nicht vor-poulated Objekt von SimpleBean (wie in XML-Konfiguration mit & lt; Konstruktor-Arg & gt;). Also, wenn Annotation verwendet wird, ist es zwingend notwendig, einen Argon-Konstruktor zu haben? Was ist der richtige Ausweg?

    
Kaushik Lele 20.04.2012, 07:28
quelle

2 Antworten

20

Aus dem Javadoc von @Configuration :

%Vor%

Sie müssen also leider einen anderen Weg finden.

    
artbristol 20.04.2012 07:59
quelle
6

Ich glaube, Sie vermischen die Annotation @Configuration und @Component . Gemäß den Spring-Dokumenten , @Configuration wird verwendet Erstellen von Beans mit Java-Code (alle Methoden, die mit @Bean kommentiert sind, erstellen eine Bean, während die Klassen mit @Component werden automatisch erstellt ..

Ich hoffe, das Folgendes veranschaulicht:

InnerBean.java:

%Vor%

SimpleBean.java:

%Vor%

OuterBean.java

%Vor%

Konfig.java

%Vor%

Main.java:

%Vor%

Die Hauptklasse verwendet die AnnotationConfigApplicationContext , um sowohl @Configuration als auch @Component -Anmerkungen zu durchsuchen und die Beans entsprechend zu erstellen.

    
beny23 20.04.2012 07:59
quelle