스프링 AOP 적용시 에러(MSG : nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException)
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로 바꿔주면 결과는 대성공이다.