سؤال

أي فكرة لماذا أحصل على هذا الاستثناء؟

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
هل كانت مفيدة؟

المحلول

أظن أنه إذا ProdMiscDAO كان واجهة (أليس كذلك؟) فلن يكون لديك هذا الخطأ. أعتقد أنك ربما يكون لديك فئة تحصل على مقولة باستخدام CGLIB تحت غطاء محرك السيارة، وأداء السحر، وما إلى ذلك، وفي النهاية، لا يمكن أن يلقي بأمان إلى أحد الأماذج في مجموعة أو منشئ. حاول البرمجة إلى واجهة ومعرفة ما إذا كان الخطأ يذهب بعيدا.

تحديث: ProdMiscDAO ليست واجهة. إنها فئة تمتد SqlMappedClientDaoSupport.

بالنظر إلى هذا، أوصي بحاول هذا:

  1. إعادة تسمية ProdMiscDAO ل SqlMappedProdMiscDAO.
  2. استخراج واجهة من SqlMappedProdMiscDAO اسم الشيئ ProdMiscDAO (على سبيل المثال "class SqlMappedProdMiscDAO implements ProdMiscDAO")
  3. انتقل من خلال كل رمزك الذي يستخدم SqlMappedProdMiscDAO وتغييرها للاستخدام ProdMiscDAO.
  4. تكوين الربيع لإرساء SqlMappedProdMiscDAO, ، الأسلاك كل الفصول التي تحتاج إليها.

هذا يسمح بتنفيذ DAO الخاص بك لا يزال يمتد SqlMappedClientDaoSupport ولكن أيضا الحصول على واجهة. بعد التبديل عبر جميع الفئات لاستخدام الواجهة بدلا من الفصل، لن تضطر الربيع إلى استخدام CGLIB إلى الوكيل الخاص بك وينبغي أن يذهب الخطأ.

نصائح أخرى

يستخدم الربيع، وكلاء، ولدت في وقت التشغيل من واجهات، للقيام بأشياء مثل المعاملات، والجوانب، وما إلى ذلك. تتمثل المصطلح الربيع المناسب للأشياء مثل DAOS، والخدمات، وما إلى ذلك. بمجرد أن يكون لديك ذلك، فأنت حر لتوليد الوكلاء من الواجهة حسب الحاجة.

حتى بالطبع سيكون لديك تطبيق DAO ملموسة، وهذا مجاني في تمديد SQLMAPClientDaosupport إذا كنت ترغب في ذلك، ولكن أيضا إنشاء واجهة تحتوي على أساليبك.

تأكد من أنك تحتاج حقا إلى تمديد SQLMAPClientDaosupport. يمكن أن يكون هذا التركيب والوفد هو وسيلة أفضل للذهاب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top