Pregunta

Cualquier idea de por qué estoy recibiendo esta excepción?

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
¿Fue útil?

Solución

Sospecho que si ProdMiscDAO era una interfaz (es?) No tendría este error. Creo que es probable que tenga una clase que se está utilizando un servidor proxy cglib bajo el capó, la magia de realizar, etc., y, al final, no se puede convertir de forma segura a un parametro en una incubadora o constructor. Vuelva a programar a una interfaz y ver si el error desaparece.

Actualizar : ProdMiscDAO no es una interfaz. Es una clase que se extiende SqlMappedClientDaoSupport.

Ante esto, recomiendo probar esto:

  1. Cambiar nombre ProdMiscDAO a SqlMappedProdMiscDAO.
  2. Extracto de una interfaz desde SqlMappedProdMiscDAO llamado ProdMiscDAO (por ejemplo "class SqlMappedProdMiscDAO implements ProdMiscDAO")
  3. Ir a través de todo el código que utiliza SqlMappedProdMiscDAO y el cambio a utilizar ProdMiscDAO.
  4. Configuración de la primavera para crear instancias de un SqlMappedProdMiscDAO, el cableado que todas las clases que lo necesitan.

Esto permite que su aplicación DAO para extender aún SqlMappedClientDaoSupport sino también tener una interfaz. Después de la conmutación de todas las clases para utilizar la interfaz en lugar de la clase, la primavera no tendrá que utilizar cglib proxy con la DAO y el error debería desaparecer.

Otros consejos

Spring utiliza proxies, generados en tiempo de ejecución de las interfaces, para hacer cosas como las transacciones, aspectos, etc. La expresión primavera adecuado para objetos como DAOs, servicios, etc. es comenzar con una interfaz y crear una aplicación concreta. Una vez conseguido eso, usted es libre para generar los proxies de la interfaz, según sea necesario.

Así que por supuesto que tendrá una aplicación DAO concreto, y eso es la libertad de ampliar SqlMapClientDaoSupport si lo desea, sino también crear una interfaz que tiene sus métodos.

Asegúrese de que usted realmente necesita para extender SqlMapClientDaoSupport. Podría ser que la composición y la delegación es un mejor camino a seguir.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top