Spring MVC kein default-Konstruktor gefunden?
Ich habe Probleme mit meinen Spring Controller - ich bekomme keinen default-Konstruktor gefunden - aber Sie haben einen Konstruktor, der ich versuche über die applicationContext.xml - hier ist das entsprechende bit:
<bean id="PcrfSimulator" class="com.rory.services.pcrf.simulator.PcrfSimulator" init-method="start">
</bean>
<bean id="CacheHandler" class="com.rory.services.pcrf.simulator.handlers.CacheHandler">
<constructor-arg index="0" type="com.rory.services.pcrf.simulator.CustomGxSessionIdCacheImpl">
<bean factory-bean="PcrfSimulator" factory-method="getGxSessionIdCache">
</bean>
</constructor-arg>
</bean>
Ie. Ich bin momentan dabei, eine Bohne zuerst, und dann zu versuchen, übergeben Sie das Ergebnis des Aufrufs einer Methode aus, die Bohne in die zweite Bohne (CacheHandler) - Konstruktor.
Hier ' E start CacheHandler:
@Controller
public class CacheHandler {
private final CustomGxSessionIdCacheImpl gxSessionIdCache;
public CacheHandler(CustomGxSessionIdCacheImpl gxSessionIdCache) {
this.gxSessionIdCache = gxSessionIdCache;
}
Hier ist der Fehler, die ich immer bin:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cacheHandler' defined in URL [jar:file:/users/rtorney/Documents/apache-tomcat-7.0.25/webapps/PCRFSimulator-4.0/WEB-INF/lib/PCRFSimulator-4.0.jar!/com/rory/services/pcrf/simulator/handlers/CacheHandler.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.rory.services.pcrf.simulator.handlers.CacheHandler]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.rory.services.pcrf.simulator.handlers.CacheHandler.<init>()
Jede Hilfe ist sehr willkommen!
InformationsquelleAutor der Frage Rory | 2012-02-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie entweder definieren Sie Ihre beans in xml oder mit Anmerkungen versehen werden, nicht beide (wenn auch nur, um Fehler zu vermeiden, wie Sie immer sind).
Das problem hier ist, dass man nicht autowiring constructor-args, also spring nicht wissen, was zu tun ist mit Ihrem controller. Es weiß, dass es zum erstellen einer bean (
@Controller
annotation), weiß aber nicht wie (keine Vorgabe, noch autowired-Konstruktor).Können Sie versuchen, etwas zu tun wie:
und dann in xml:
So wird es autowire Konstruktor-Parameter.
Andere Möglichkeit ist, erstellen Sie einfach Standard-Konstruktor und autowire
gxSessionIdCache
Eigenschaft.InformationsquelleAutor der Antwort soulcheck
Müssen Sie fügen Sie einen leeren default-Konstruktor :
Aber seien Sie vorsichtig, weil es scheint, dass beim mischen annotation-basierte Konfiguration (@Controller) und XML-Konfiguration. In dem obigen Beispiel, verwendet es die annotation-basierte Konfiguration (also bitte entfernen Sie die bean-Deklaration aus XML-Datei).
InformationsquelleAutor der Antwort nico_ekito
Sie können auch diese Fehlermeldung angezeigt, wenn Sie noch nicht aktiviert Spring-annotation-basierte Konfiguration. Sind diese in der Spring-Xml:
<context:annotation-config/>
InformationsquelleAutor der Antwort Paul Hilliar
Anderen Poster haben darauf hingewiesen, dass Sie Probleme bekommen, wenn Sie mischen autowiring/component-scan mit expliziter Instanziierung der beans. Ich hatte ein ähnliches problem mit einer web-Anwendung, die das getan hat. Ich war in der Lage das problem zu beheben, indem Sie die Komponente-scanner nicht automatisch zu instanziieren, eine Bohne von der entscheidenden Klasse. Wie diese:
wo
repository.xml
enthalten die explizite bean Instanziierung:InformationsquelleAutor der Antwort Raedwald