Loading...
Spring Framework Reference Documentation 7.0.2의 Using @Transactional with AspectJ의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
@Transactional with AspectJ또한 AspectJ aspect를 통해 Spring Framework의 @Transactional 지원을 Spring 컨테이너 외부에서 사용할 수도 있습니다. 그렇게 하려면 먼저 클래스(그리고 선택적으로 클래스의 메서드)를 @Transactional 어노테이션으로 어노테이트하고, 그런 다음 spring-aspects.jar 파일에 정의된 org.springframework.transaction.aspectj.AnnotationTransactionAspect와 애플리케이션을 링크(weave)해야 합니다. 또한 aspect를 트랜잭션 매니저로 설정해야 합니다. Spring Framework의 IoC 컨테이너를 사용하여 aspect에 대한 의존성 주입을 처리할 수 있습니다.
트랜잭션 관리 aspect를 설정하는 가장 간단한 방법은 <tx:annotation-driven/> 요소를 사용하고, Using @Transactional에 설명된 대로 mode 속성을 aspectj로 지정하는 것입니다. 여기서는 Spring 컨테이너 외부에서 실행되는 애플리케이션에 초점을 맞추기 때문에, 이를 프로그래밍 방식으로 수행하는 방법을 보여 줍니다.
계속 진행하기 전에,<br>Using
@Transactional및<br>AOP를 각각 읽어 보는 것이 좋습니다.
다음 예제는 트랜잭션 매니저를 생성하고 이를 사용하도록 AnnotationTransactionAspect를 설정하는 방법을 보여 줍니다:
1// construct an appropriate transaction manager 2DataSourceTransactionManager txManager = new DataSourceTransactionManager(getDataSource()); 3 4// configure the AnnotationTransactionAspect to use it; this must be done before executing any transactional methods 5AnnotationTransactionAspect.aspectOf().setTransactionManager(txManager);
1// construct an appropriate transaction manager 2val txManager = DataSourceTransactionManager(getDataSource()) 3 4// configure the AnnotationTransactionAspect to use it; this must be done before executing any transactional methods 5AnnotationTransactionAspect.aspectOf().transactionManager = txManager
이 aspect를 사용할 때는, class가 구현하는 interface(있는 경우)가 아니라 implementation class(또는 해당 class 내의 methods 또는 둘 다)에 annotation을 지정해야 합니다. AspectJ는 interfaces의 annotations가 상속되지 않는다는 Java의 규칙을 따릅니다.
클래스에 대한 @Transactional 어노테이션은 클래스 내의 어떤 public 메서드라도 실행될 때의 기본 트랜잭션 시맨틱스를 지정합니다.
클래스 내의 메서드에 대한 @Transactional 어노테이션은 클래스 어노테이션(있는 경우)에 의해 부여된 기본 트랜잭션 시맨틱스를 오버라이드합니다. 가시성과 상관없이 어떤 메서드에도 어노테이션을 지정할 수 있습니다.
AnnotationTransactionAspect로 애플리케이션을 위브하려면, AspectJ로 애플리케이션을 빌드( AspectJ Development
Guide 참조)하거나 로드 타임 위빙을 사용해야 합니다. AspectJ와 함께 하는 로드 타임 위빙에 대한 논의는 Load-time weaving with AspectJ in the Spring Framework를 참조하십시오.
Advising Transactional Operations
Programmatic Transaction Management