Spring - Seltsamer Fehler bei der Bean-Erstellung

7

Irgendeine Idee, warum ich diese Ausnahme bekomme?

%Vor%     
peakit 23.09.2009, 21:38
quelle

2 Antworten

18

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:

  1. Benennen Sie ProdMiscDAO in SqlMappedProdMiscDAO um.
  2. Extrahiere eine Schnittstelle aus SqlMappedProdMiscDAO namens ProdMiscDAO (z. B. " class SqlMappedProdMiscDAO implements ProdMiscDAO ")
  3. Gehen Sie den gesamten Code durch, der SqlMappedProdMiscDAO verwendet, und ändern Sie ihn so, dass er ProdMiscDAO verwendet.
  4. Konfigurieren Sie die Feder, um 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.

    
SingleShot 23.09.2009, 21:43
quelle
4

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.

    
duffymo 23.09.2009 22:01
quelle