Ich verstehe nicht ... Ich Konstruktor eigentlich definiert, aber ich bin immerKein Konstruktor mit 0 Argumente in der Klasse definiert ist, wenn explizit Konstruktor definieren
No constructor with 0 arguments defined in class
@Component
public class CustomMessageSource extends ReloadableResourceBundleMessageSource {
public CustomMessageSource(Locale locale){
this.propertiesHolder = getMergedProperties(locale);
this.properties = propertiesHolder.getProperties();
}
//... other setting, getters
Dies ist, wie ich es instanziiert
CustomMessageSource customMessage = new CustomMessageSource(locale);
Das ist mein Stack-Trace
Caused by: java.lang.NoSuchMethodException: com.app.service.CustomMessageSource.<init>()
at java.lang.Class.getConstructor0(Class.java:3074)
at java.lang.Class.getDeclaredConstructor(Class.java:2170)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:80)
... 38 more
Ihr Konstruktor hat '1' Argument, nicht' 0'. Wenn Sie einen '0'-Konstruktor haben wollen und mindestens einen Konstruktor definiert haben, müssen Sie selbst einen' 0'-Konstruktor schreiben. Java liefert einen '0'-Konstruktor (default-constructor), wenn Sie überhaupt keinen Konstruktor geschrieben haben. – Turing85
@ Turing85 Richtig, aber das Hinzufügen eines Konstruktors ohne Argumente scheint nicht geeignet zu sein, da es verhindert, dass eine 'CustomMessageSource'-Instanz mit einem konsistenten Status erstellt wird, der durch den Konstruktor mit definiertem Argument garantiert wird. – davidxxx
Setzen Sie '@ Autowired' auf den Konstruktor (oder verwenden Sie Spring 4.3), um Spring zu bestimmen, welcher zu verwenden ist, andernfalls erwartet es einen Standard-Konstruktor ohne Argumente. –