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?
Aus dem Javadoc von @Configuration
:
Sie müssen also leider einen anderen Weg finden.
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.
Tags und Links spring annotations default-constructor constructor-injection