문제

왜이 예외를 얻고 있는지 아십니까?

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 그러나 인터페이스도 갖습니다. 클래스 대신 인터페이스를 사용하기 위해 모든 클래스를 전환 한 후 Spring은 CGLIB를 사용하여 DAO를 프록시 할 필요가 없으며 오류가 사라져야합니다.

다른 팁

Spring은 인터페이스에서 런타임에 생성 된 프록시를 사용하여 트랜잭션, 측면 등과 같은 작업을 수행합니다. DAOS, 서비스 등과 같은 객체를위한 적절한 스프링 관용구는 인터페이스부터 시작하여 구체적인 구현을 만드는 것입니다. 일단 있으면 필요에 따라 인터페이스에서 프록시를 자유롭게 생성 할 수 있습니다.

물론 콘크리트 DAO 구현이 가능하며 원하는 경우 SQLMapClientDaoSupport를 자유롭게 확장 할 수있을뿐만 아니라 메소드가있는 인터페이스를 만들 수 있습니다.

sqlmapclientDaoSupport를 실제로 확장 해야하는지 확인하십시오. 구성과 대표단이 더 나은 방법 일 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top