복붙노트

[SPRING] Spring 오류 발생 "Jenkins에서 'x'라는 이름의 빈은 [y] 유형이어야하지만 실제로는 [$ Proxy] 유형입니다."

SPRING

Spring 오류 발생 "Jenkins에서 'x'라는 이름의 빈은 [y] 유형이어야하지만 실제로는 [$ Proxy] 유형입니다."

나는 잠시 동안 이것을 디버깅 해왔고, 누군가가 여기에 약간의 빛을 비추기를 바라고있다.

젠킨스에 JDK 1.6을 사용하여 추가 된 메이븐 프로젝트가 있습니다. 이 프로젝트에서 AOP를 사용하여 데이터베이스 트랜잭션을 처리하고 있습니다.

Jenkins에서 빌드를 실행하면 테스트 케이스가 다음 예외를 제외하고 실패합니다.

Caused by: org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'dataHandlerClassificationImpl': 
Injection of resource dependencies failed; nested exception is 
org.springframework.beans.factory.BeanNotOfRequiredTypeException: 
Bean named 'writerDataLocationImpl' must be of type [xxx.script.WriterData], 
but was actually of type [$Proxy17]
    ...
    ...
Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: 
Bean named 'writerDataLocationImpl' must be of type [xxx.script.WriterData], 
but was actually of type [$Proxy17]
    ...
    ...

DataHandlerClassificationImpl 클래스는 다음과 유사합니다.

@Service
public class DataHandlerClassificationImpl extends DataHandler {

    @Resource(name="writerDataLocationImpl")
    private WriterData writerData;

    ...
}       

WriterData는 복수의 구현을 가지는 인터페이스입니다.

IDE에서 문제없이 코드를 실행할 수 있습니다. Maven 문제인지 Jenkins 문제인지 판단하기 위해 명령 줄을 사용하여 Jenkins의 프로젝트 작업 폴더로 이동했는데 오류없이 mvn test를 실행할 수 있습니다.

나는 프록시 에러가 AOP와 관련이 있으며, 구체적인 클래스 대신 인터페이스로만 autowire 할 수 있다는 것을 알고있다.하지만 Jenkins 외부에서 코드를 잘 실행할 수 있기 때문에 여기서는 그렇지 않다.

어떤 아이디어? 감사.

해결법

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

    1.위의 질문에서 발췌 :

    위의 질문에서 발췌 :

    Jenkins에서 Cobertura, Sonar 또는 기타 코드 계측 도구를 실행하고 있습니까? 생성 된 사이트에 Cobertura 보고서를 포함하도록 mvn 사이트를 구성 할 수도 있습니다.

    Cobertura의 문제점은 일부 커스텀 인터페이스의 추가를 포함하여 상당히 무거운 바이트 코드 계측을 수행한다는 것입니다. Spring이 시작되면 빈에 대한 프록시를 생성한다. bean이 적어도 하나의 인터페이스를 가지고 있다면, 표준 자바 프록시를 사용한다. 그렇지 않으면 클래스 기반 프록시를 작성하려고 시도합니다.

    귀하의 경우에는 CGLIB 클래스 프록시가 사용되었지만 Cobertura 계측 후 Java 프락시로 되돌아갑니다. 종속성 삽입이 예상되는 클래스 (또는 CGLIB 하위 클래스) 때문에 시작 오류가 발생했습니다.

    긴 이야기를 짧게 줄이려면 CGLIB 클래스 프록시를 실행하면됩니다.

    <aop:config proxy-target-class="true"/>
    
  2. from https://stackoverflow.com/questions/8391944/getting-spring-error-bean-named-x-must-be-of-type-y-but-was-actually-of-ty by cc-by-sa and MIT license