Domanda

Qualche idea perché sto ottenendo questa eccezione?

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
È stato utile?

Soluzione

Ho il sospetto che se fosse ProdMiscDAO un'interfaccia (è?) Non avreste questo errore. Credo che probabilmente avete una classe che sta ottenendo proxy utilizzando cglib sotto il cofano, la magia esecuzione, ecc e, alla fine, non può essere lanciato in modo sicuro a un paramter in un setter o costruttore. Provare a programmare a un'interfaccia e vedere se l'errore va via.

Aggiorna : ProdMiscDAO non è un'interfaccia. Si tratta di una classe che estende SqlMappedClientDaoSupport.

Detto questo, vi consiglio di provare questo:

  1. Rinomina ProdMiscDAO a SqlMappedProdMiscDAO.
  2. Estratto un'interfaccia da SqlMappedProdMiscDAO chiamato ProdMiscDAO (ad esempio "class SqlMappedProdMiscDAO implements ProdMiscDAO")
  3. passare attraverso tutto il codice che utilizza SqlMappedProdMiscDAO e cambiarlo per usare ProdMiscDAO.
  4. Configura primavera creare un'istanza di un SqlMappedProdMiscDAO, cablarlo tutte le classi che ne hanno bisogno.

In questo modo l'implementazione DAO per estendere ancora SqlMappedClientDaoSupport ma anche di avere un'interfaccia. Dopo il passaggio su tutte le classi di utilizzare l'interfaccia al posto della classe, Primavera non dovrà utilizzare cglib per proxy per DAO e l'errore dovrebbe andare via.

Altri suggerimenti

Spring usa le procure, generato a run-time dalle interfacce, a fare le cose come le transazioni, aspetti, ecc L'idioma molla corretta per gli oggetti come i DAO, servizi, ecc è di iniziare con un'interfaccia e creare una concreta attuazione. Una volta che avete, siete liberi di generare proxy dall'interfaccia se necessario.

Così, naturalmente, si avrà una concreta attuazione DAO, e questo è libero di estendere SqlMapClientDaoSupport se lo si desidera, ma anche di creare un'interfaccia che ha i suoi metodi.

Assicurarsi che si ha realmente bisogno di estendere SqlMapClientDaoSupport. Potrebbe essere che la composizione e la delega è un modo migliore per andare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top