spring-tx 라이브러리를 프로젝트에 빌드 처리 - 메이븐 : pom.xml
=>spring-jdbc 라이브러리를 프로젝트에 빌드 처리하면 라이브러리 의존관계에 의해 자동으로 빌드 처리
Spring Bean Configuration File(root-context.xml)에 TransactionManager 관련 클래스를 Spring Bean으로 등록
<!-- annotation-driven : @Transcational 어노테이션을 사용해 TransactionManager 객체로
트렌젝션 관리 기능을 제공하는 엘리먼트 -->
<tx:annotation-driven/>
<!-- TransactionManager 객체를 사용해 트렌젝션를 관리할 수 있도록 설정하기 위해 tx 네임스페이스에
spring-tx.xsd 파일을 제공받아 엘리먼트를 사용할 수 있도록 설정 -->
<!-- advice : TransactionManager 객체로 Advisor를 생성하기 위한 엘리먼트 -->
<!-- Advisor : 삽입위치(JoinPoint)가 정해져 있는 횡단관심코드가 작성된 Advice 객체 -->
<!-- id 속성 : advice 엘리먼트를 구분하기 위한 식별자를 속성값으로 설정 -->
<!-- transaction-manager 속성 : TransactionManager 기능을 제공하는 Spring Bean의 식별자
(beanName)를 속성값으로 설정 -->
<!-- => TransactionManager 객체를 사용해 예외가 발생되지 않은 경우 커밋 처리하고
예외가 발생될 경우 롤백 처리 -->
<!-- attributes : TransactionManager 객체에 의해 커밋 또는 롤백 처리될 메소드의 목록을
설정하기 위한 엘리먼트 - 하위 엘리먼트 : method 엘리먼트 -->
<!-- method : TransactionManager 객체에 관리될 메소드의 이름과 트렌젝션 처리 방식을 설정하기 위한 엘리먼트 -->
<!-- name 속성 : TransactionManager 객체에 관리될 메소드의 이름을 속성값으로 설정 -->
<!-- => 메소드의 이름에는 [*] 기호를 사용해 설정 가능 -->
<!-- rollback-for 속성 : 롤백 처리하기 위한 예외를 속성값으로 설정 -->
<!-- read-only 속성 : false(기본) 또는 true(트렌젝션 불필요) 중 하나를 속성값으로 설정 -->
<!--
<tx:advice id="txAdvisor" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" rollback-for="Exception"/>
<tx:method name="modify*" rollback-for="Exception"/>
<tx:method name="remove*" rollback-for="Exception"/>
<tx:method name="get*" read-only="true"/>
</tx:attributes>
</tx:advice>
-->
<!-- Spring AOP 기능을 사용하기 위해 aop 네임스페이스에 spring-aop.xsd 파일을 제공받아
엘리먼트를 사용할 수 있도록 설정 -->
<!-- advisor : Advisor를 제공받아 사용하기 위한 엘리먼트 -->
<!-- advice-ref 속성 : Advisor를 생성한 advice 엘리먼트의 식별자를 속성값으로 설정 -->
<!--
<aop:config>
<aop:advisor advice-ref="txAdvisor" pointcut="execution(* xyz.itwill09.service..*(..))"/>
</aop:config>
-->
=> 트랜잭션 관리를 위한 AOP 설정 대신 @Transcational 어노테이션 사용 가능
TransactionManager 객체에 의해 트랜잭션 관리될 메소드에 @Transcational 어노테이션을 사용하면 예외가 발생하지 않은 경우 커밋 처리하고 예외가 발생된 경우 롤백 처리
@Transcational 어노테이션을 사용하기 위해서는 Spring Bean Configuration File(root-context.xml)에 annotation-driven 엘리먼트 작성
Spring Bean Configuration File에서 tx 네임스페이스에 spring-tx.xsd 파일을 제공 받아야만 annotation-driven 엘리먼트를 사용 가능
rollbackFor 속성: 롤백 처리될 예외 클래스의 Class 객체를 속성값으로 설정 - 생략 가능
테스트 메소드에 @Transactional 어노테이션을 사용하면 예외 발생에 상관 없이 무조건 롤백 처리