@Configurable 사용시 버그 피해가기
머시기/모시기/클래스$$EnhancerByCGLIB$$6dd4e683, method: unique signature:
()L저기기/거시기/클래스;) Inconsistent stack height 1 != 0
참조 : http://forum.springframework.org/showthread.php?t=51455
CGLib으로 만든어진 객체에 위빙을 시도해서 생기는 문제 같은데, 일종의 버그인가봅니다. 이전에 @Configurable 테스트 할 땐 못 본 에러인데 오랜만에 이걸 쓸 일이 있어서 사용하니까 발생하네요.
이 문제를 해결(?)하려면 일단 META-INF 폴더를 클래스 패스 안에 만들어 줍니다. 만든 다음에 클래스 패스에 추가해도 되구요.
다음은 aop.xml 파일을 정의하고 다음과 같이 적어줍니다.
<!--
AspectJ load-time weaving config file to install common Spring aspects.
-->
<aspectj>
<weaver options="-showWeaveInfo" >
<exclude within="*..*CGLIB*" />
</weaver>
<aspects>
<aspect
name="org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect" />
<aspect
name="org.springframework.transaction.aspectj.AnnotationTransactionAspect" />
</aspects>
</aspectj>
다른 내용은 spring-aspects.jar 파일에 기본으로 들어있는 aop.xml의 내용과 일치하구요. 거기에 <warver> 엘리먼트를 추가해서 CGLIB이 들어간 클래스에는 위빙하지 말라는 설정을 해줍니다.
아.. 근데 이렇게 하면 프록시에는 위빙하지 말라는건데... 이것참 난감하네요. 버그 보니까 해결됐다고 나오는데 저 문제는 왜 발생하는건지..에구구...