2017-03-13 7 views
1

Spring Boot DevTools (핫 리로드 용 라이브러리)을 실험하고 싶었지만 프로젝트에 포함시킨 후에 문제가 발생했습니다. @Lazy 필드 콩 BeanCreationException을 제기했다 :스프링 부트 DevTools 초기화 오류

오류 이름으로 'project.specific.Bean'콩 만들기를 autowire 종속성 주입 실패; 중첩 예외는 org.springframework.aop.framework.AopConfigException : [class project.specific.Factory] 클래스의 CGLIB 하위 클래스를 생성 할 수 없습니다 :이 문제의 일반적인 원인은 최종 클래스 또는 보이지 않는 클래스 사용입니다. 상자의 예외는 org.springframework.cglib.core.CodeGenerationException입니다 : java.lang.reflect.InvocationTargetException -> 널

project.specific.Bean 내가 DevTools로 시도이

@Component 
public class Bean ... { 
    ... 
    @Autowired 
    @Lazy 
    private Factory factory; 
    ... 
} 

처럼 보인다 동일한 결과를 가진 스프링 부트 AthensBrussels.

간단히 @Lazy을 제거한 후에 으로 바뀐 @Repository에 약간의 문제가 있습니다 (아테네에서만 사용).

이 정말 이상한 문제가 된 후에 것을 :

java.lang.ClassCastException가 : project.specific.Product은 분명히

내가 돈 project.specific.Product

캐스트 할 수없는 ' @Lazy을 제거하고 @Repository@Component으로 바꾸고 싶습니다.하지만 내가 잘못하고있는 것일 수 있습니까?

답변

0

아마도 스프링 개발자 도구의 재시작 클래스 로더 때문일 수 있습니다.
두 클래스 로더를 사용하여 Automatic restart

봄 부팅 제공하는 재시작 기술은 작동의 문서를 참조하십시오. 변경되지 않는 클래스 (예 : 써드 파티 jar)는 기본 클래스 로더에로드됩니다. 이 활발하게 개발중인 클래스는 다시 시작 클래스 로더에로드됩니다.

일부 클래스는 다른 클래스 로더 (클래스 로더 또는 기본 클래스 로더 다시 시작)에 의해로드되었습니다.
클래스가 다른 클래스 로더에 의해로드 된 경우 다른 클래스 (bean)로 인식됩니다.

프로젝트가 빈을 자동 실행하지 못하고 동일한 클래스간에 ClassCastException이 발생하는 이유입니다.

및 해결 방법

here

당신 할 수있는 클래스 로더가 spring-devtools.properties에 의해 명시 적으로 클래스를로드합니다 선택.

+0

"기본"클래스 로더에 의해로드되도록 일부 클래스/라이브러리를 제외해야한다는 뜻입니까? 그러나'@ Lazy'와'@ Repository'에서 내가 가진 문제점은 이미 배제되어야하는 항아리에서 유래했습니다. – RunninglVlan

관련 문제