Warum muss ich einen Standardkonstruktor in einer Spring-Konfigurationsklasse haben, die mit der @Constructor-Annotation versehen ist?

8

Ich lerne für die Spring Core-Zertifizierung und habe diese Fragen, aber ich kann keine Antwort darauf geben.

  

Warum müssen Sie in Ihrer @Configuration einen Standardkonstruktor haben?   annotierte Klasse?

Ich deklariere keinen Konstruktor in meinen Konfigurationsklassen, die durch die Annotation @Configuration gekennzeichnet sind. Der Standardkonstruktor wird von der Superklasse geerbt? oder was? Warum muss ich einen Standardkonstruktor haben und ich kann ihn nicht überschreiben?

Tnx

    
Java Surfer 16.03.2015, 09:21
quelle

1 Antwort

18

Nach offiziellem Frühjahrsjavadoc , Spring @Configuration Annotated-Klassen müssen den Standard-Konstruktor no-arg haben

  

@Configuration-Klassen müssen einen default / no-arg-Konstruktor haben und dürfen keine @Autowired-Konstruktorparameter verwenden. Alle geschachtelten Konfigurationsklassen müssen statisch sein

Der Grund dafür ist, dass der Frühling CGLIB zu proxy @Configuration Klassen und es gibt Einschränkungen im Frühjahr, Für die Klassen, die mit CGLIB vor Version 4 proxiediert wurden, muss der Standard-Konstruktor für Nicht-Argumente vorhanden sein.

  

Vor Spring 4 erfordern CGLIB-basierte Proxy-Klassen einen Standardkonstruktor. Und dies ist nicht die Beschränkung der CGLIB-Bibliothek, sondern Spring selbst. Glücklicherweise ist dies ab dem 4. Frühjahr kein Problem mehr. CGLIB-basierte Proxy-Klassen benötigen keinen Standardkonstruktor mehr.

    
Vojtech Ruzicka 16.03.2015, 09:31
quelle