Ich vermute, dass, wenn ProdMiscDAO
eine Schnittstelle wäre (oder?), Sie diesen Fehler nicht haben würden. Ich glaube, dass Sie wahrscheinlich eine Klasse haben, die mit cglib unter der Haube proxiediert wird, Magie ausführt, usw. und am Ende nicht sicher in einen Parameter oder Setter oder Konstruktor umgewandelt werden kann. Versuchen Sie, an eine Schnittstelle zu programmieren und sehen Sie, ob der Fehler verschwindet.
Aktualisieren : ProdMiscDAO
ist keine Schnittstelle. Es ist eine Klasse, die SqlMappedClientDaoSupport
erweitert.
Angesichts dessen empfehle ich Folgendes:
ProdMiscDAO
in SqlMappedProdMiscDAO
um. SqlMappedProdMiscDAO
namens ProdMiscDAO
(z. B. " class SqlMappedProdMiscDAO implements ProdMiscDAO
") SqlMappedProdMiscDAO
verwendet, und ändern Sie ihn so, dass er ProdMiscDAO
verwendet. SqlMappedProdMiscDAO
zu instanziieren, und verbinden Sie alle Klassen, die sie benötigen. Dadurch kann Ihre DAO-Implementierung SqlMappedClientDaoSupport
noch erweitern, aber auch über eine Schnittstelle verfügen. Nachdem Sie alle Klassen gewechselt haben, um die Schnittstelle anstelle der Klasse zu verwenden, muss Spring nicht mehr cglib verwenden, um Ihr DAO als Proxy zu verwenden, und der Fehler sollte verschwinden.
Spring verwendet Proxys, die zur Laufzeit von Schnittstellen erzeugt werden, um Dinge wie Transaktionen, Aspekte usw. zu erledigen. Das richtige Spring-Idiom für Objekte wie DAOs, Dienste usw. ist es, mit einer Schnittstelle zu beginnen und eine konkrete Implementierung zu erstellen. Sobald Sie das haben, können Sie Proxies nach Bedarf von der Schnittstelle generieren.
Sie haben also natürlich eine konkrete DAO-Implementierung, und Sie können SqlMapClientDaoSupport auf Wunsch erweitern, aber auch eine Schnittstelle mit Ihren Methoden erstellen.
Stellen Sie sicher, dass Sie SqlMapClientDaoSupport wirklich erweitern müssen. Es könnte sein, dass Zusammensetzung und Delegation ein besserer Weg ist.
Tags und Links java spring dependency-injection java-ee-6 cglib