복붙노트

[SPRING] 콩 생성에있어서 봄 - 이상한 오류

SPRING

콩 생성에있어서 봄 - 이상한 오류

왜 내가이 예외를 얻는 지 아는 어떤 생각?

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

해결법

  1. ==============================

    1.ProdMiscDAO가 인터페이스라면 (그렇습니까?)이 오류가 발생하지 않는다고 생각합니다. 아마 당신은 후드 아래에서 cglib를 사용하여 프록시가되고, 마술 등을 수행하는 클래스를 가지고있을 것이며 결국에는 setter 또는 생성자의 매개 변수로 안전하게 캐스팅 될 수 없다고 생각합니다. 프로그래밍 인터페이스를 시도하고 오류가 사라지는지보십시오.

    ProdMiscDAO가 인터페이스라면 (그렇습니까?)이 오류가 발생하지 않는다고 생각합니다. 아마 당신은 후드 아래에서 cglib를 사용하여 프록시가되고, 마술 등을 수행하는 클래스를 가지고있을 것이며 결국에는 setter 또는 생성자의 매개 변수로 안전하게 캐스팅 될 수 없다고 생각합니다. 프로그래밍 인터페이스를 시도하고 오류가 사라지는지보십시오.

    업데이트 : ProdMiscDAO는 인터페이스가 아닙니다. SqlMappedClientDaoSupport를 확장 한 클래스입니다.

    이것을 감안할 때, 나는 이것을 시도하는 것이 좋습니다 :

    이것은 당신의 DAO 구현이 여전히 SqlMappedClientDaoSupport를 확장 할 수있게 해줄뿐만 아니라 인터페이스를 갖도록합니다. 클래스 대신 인터페이스를 사용하도록 모든 클래스를 전환 한 후 Spring은 DAO를 프록시하기 위해 cglib을 사용할 필요가 없으므로 오류가 사라집니다.

  2. ==============================

    2.Spring은 인터페이스에서 런타임에 생성 된 프록시를 사용하여 트랜잭션, aspect 등을 처리한다. DAO, 서비스 등과 같은 객체를위한 적절한 Spring 이디엄은 인터페이스로 시작하여 구체적인 구현을 만드는 것이다. 일단 인터페이스가 있으면 필요에 따라 인터페이스에서 프록시를 생성 할 수 있습니다.

    Spring은 인터페이스에서 런타임에 생성 된 프록시를 사용하여 트랜잭션, aspect 등을 처리한다. DAO, 서비스 등과 같은 객체를위한 적절한 Spring 이디엄은 인터페이스로 시작하여 구체적인 구현을 만드는 것이다. 일단 인터페이스가 있으면 필요에 따라 인터페이스에서 프록시를 생성 할 수 있습니다.

    물론 구체적인 DAO 구현을 할 수 있습니다. 원하는 경우 SqlMapClientDaoSupport를 확장 할 수 있지만 메서드가있는 인터페이스도 만들 수 있습니다.

    반드시 SqlMapClientDaoSupport를 확장해야합니다. 구성과 위임이 더 좋은 방법 일 수 있습니다.

  3. from https://stackoverflow.com/questions/1468657/spring-weird-error-in-bean-creation by cc-by-sa and MIT license