IT/SpringFramework

스프링 AOP 적용시 에러(MSG : nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException)

주현태 2019. 12. 2. 19:24

AOP 관련하여 실습을 진행중인데 뭔가 에러메시지가 많이 뜬다. 이상하다.. aop네임스페이스를 책에서 처럼 추가하였을 뿐이었는데 무엇이 문제일까..

 

일단, 에러메시지를 쭉 살펴보았는데 다음과같이 클래스를 찾지 못한다는 에러메시지가 뜬다.

 

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor#0': Cannot resolve reference to bean 'beanAdvicePointcut' while setting bean property 'pointcut'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'beanAdvicePointcut': Failed to introspect bean class [org.springframework.aop.aspectj.AspectJExpressionPointcut] for lookup method metadata: could not find class that it depends on; nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException

 

인터넷에서 찾아보니까 Maven 설정이 잘못되어있다는게 답이다.

 

기존에 다음과 같이 pom.xml 에 설정된 의존관계를 바꿔주어야 한다.

 

 

<!-- AspectJ (Before)-->

<dependency>

<groupId>org.aspectj</groupId>

<artifactId>aspectjrt</artifactId>

<version>${org.aspectj-version}</version>

</dependency>

 

<!-- AspectJ (After)-->

<dependency>

<groupId>org.aspectj</groupId>

<artifactId>aspectjweaver</artifactId>

<version>${org.aspectj-version}</version>

</dependency>

 

artifcatId를 aspectjrt -> aspectjweaver로 바꿔주면 결과는 대성공이다.