Frage

Jede Idee, warum ich erhalte diese Ausnahme?

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myService' defined in class path resource [context.xml]: Initialization of bean failed; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert property value of type [$Proxy54 implementing org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised,net.sf.cglib.proxy.Factory,org.springframework.beans.factory.InitializingBean] to required type [com.mycompany.service.dao.MyDAO] for property 'myDAO'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [$Proxy54 implementing org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised,net.sf.cglib.proxy.Factory,org.springframework.beans.factory.InitializingBean] to required type [com.mycompany.service.dao.MyDAO] for property 'myDAO': no matching editors or conversion strategy found
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:480)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:671)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:610)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:499)
    ... 36 more
Caused by: java.lang.IllegalArgumentException: Cannot convert value of type [$Proxy54 implementing org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised,net.sf.cglib.proxy.Factory,org.springframework.beans.factory.InitializingBean] to required type [com.mycompany.service.dao.MyDAO] for property 'myDAO': no matching editors or conversion strategy found
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:231)
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:138)
    at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:386)
... 62 more
War es hilfreich?

Lösung

Ich vermute, dass, wenn ProdMiscDAO eine Schnittstelle ist (ist?) Sie würde diesen Fehler nicht hat. Ich glaube, dass Sie wahrscheinlich eine Klasse, die mit cglib unter der Haube ist proxied bekommen, zaubert usw. und am Ende kann es nicht sicher zu einem Paramter in einem Einrichter oder Konstruktor gegossen werden. Versuchen Sie die Programmierung mit einer Schnittstelle und sehen, ob der Fehler geht weg.

Update : ProdMiscDAO ist keine Schnittstelle. Es ist eine Klasse, die SqlMappedClientDaoSupport erstreckt.

Vor diesem Hintergrund empfehle ich versuchen, diese:

  1. Umbenennen ProdMiscDAO SqlMappedProdMiscDAO.
  2. Extrahieren eine Schnittstelle von SqlMappedProdMiscDAO genannt ProdMiscDAO (z.B. "class SqlMappedProdMiscDAO implements ProdMiscDAO")
  3. Gehen Sie durch den gesamten Code, der SqlMappedProdMiscDAO verwendet, und ändern Sie es ProdMiscDAO verwenden.
  4. Feder Konfigurieren eines SqlMappedProdMiscDAO instanziiert, es alle Klassen Verdrahtung, die sie benötigen.

Auf diese Weise können Sie Ihre DAO Implementierung noch SqlMappedClientDaoSupport erweitern, sondern auch eine Schnittstelle zu haben. Nachdem alle Klassen Umschalten der Schnittstelle statt der Klasse zu verwenden, Frühling müssen nicht cglib Proxy Ihre DAO und der Fehler weg verwenden sollte gehen.

Andere Tipps

Spring verwendet Proxies zur Laufzeit von Schnittstellen erzeugt, Dinge wie Transaktionen zu tun, Aspekte usw. Das richtige Feder Idiom für Objekte wie DAOs, Dienstleistungen usw. ist mit einer Schnittstelle zu starten und eine konkrete Umsetzung zu schaffen. Sobald Sie, dass, Sie sind frei Proxies von der Schnittstelle je nach Bedarf zu erzeugen.

So selbstverständlich es eine konkrete DAO Implementierung haben, und das ist kostenlos SqlMapClientDaoSupport zu verlängern, wenn Sie wollen, aber auch eine Schnittstelle erstellen, die Ihre Methoden hat.

Seien Sie sicher, dass Sie wirklich brauchen SqlMapClientDaoSupport zu verlängern. Es könnte sein, dass Zusammensetzung und Delegation ein besserer Weg zu gehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top