스프링에 태랜젹션 적용을 위해서

서블릿 설정파일에

<!-- transaction 설정 -->

<beans:bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

  <beans:property name="dataSource" ref="dataSource"/>

</beans:bean>


<tx:advice id="txAdvice" transaction-manager="txManager">

<tx:attributes>

<tx:method name="*" rollback-for="Exception"/>

</tx:attributes>

</tx:advice>


<aop:config>

<aop:pointcut id="requiredTx" expression="execution(* com.javalec.spring_mybatis.dao..*Dao.*(..)) or execution(* com.javalec.spring_mybatis..*Dao.*(..))"/>

<aop:advisor advice-ref="txAdvice" pointcut-ref="requiredTx" />

</aop:config>


설정과

pom.xml에

AOP 설정


<!-- AspectJ -->

<dependency>

<groupId>org.aspectj</groupId>

<artifactId>aspectjrt</artifactId>

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

</dependency>


을 하고 서버를 기동하니 아래와 같은 에러가 발생했다.



org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mvcContentNegotiationManager': BeanPostProcessor before instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor#0': Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException



에러 내용을 보니 결국 org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException  파일이 없다는 것이다.


뭐지 한참을 삽질을 하다가

AOP 메이블 설정을 잘못한 것이다.


위 설정이 아닌 아래 설정을 해야 하는데 실수한 것이다.



<!-- AspectJ Weaver -->

<dependency>

    <groupId>org.aspectj</groupId>

    <artifactId>aspectjweaver</artifactId>

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

</dependency>

로 설정을 해야 한다.


weaver가 AOP에서 advice를 핵심기능에 적용하는 설정 파일이라고 합니다.


+ Recent posts