티스토리 뷰
[Spring Framework]
[spring] private와 inner method에서의 spring trasaction 동작
handr95 2019. 5. 22. 22:00반응형
private 메서드와 동일 클래스 메서드 내에서 @transaction을 선언한다면 동작하지 않는다.
private method에서의 동작
public class Bean {
public void doStuff() {
doPrivateStuff();
}
@Transactional
private void doPrivateStuff() {
}
}
///...
Bean bean = (Bean)appContext.getBean("bean");
bean.doStuff();
@Transcation annotaion은 private 메서드에 어노테이션을 적용했을때는 동작하지 않는다.
스프링은 Transcation을 처리하기 위해 빈 객체에 대한 프록시 객체를 생성을 하는데,
스프링 프록시는 타깃 클래스를 상속해서 프록시를 만드는 방법을 사용하기 때문에 상속이 불가능한 private 메서드의 경우 적용이 불가능하다.
마찬가지로 final이 적용된 메서드도 동작하지 않는다.
만약, private 메서드에 transcation 처리를 하고 싶다면 AspectJ를 이용하여 처리 할 수 있다.
inner method에서의 동작
public class Bean {
public void doStuff() {
doTransactionStuff();
}
@Transactional
public void doTransactionStuff() {
//...
}
}
//트랜잭션 동작함
Bean bean = (Bean)appContext.getBean("bean");
bean.doTransactionStuff();
//트랜잭션 동작 안함
Bean bean = (Bean)appContext.getBean("bean");
bean.doStuff();
스프링 프록시는 프록시를 통해 들어오는 외부 메서드의 호출에서만 가로챌 수 있다. 내부 메서드에 적용한 @Transctional을 알 수 없다.
즉, 대상 객체 내의 메서드 내부에서의 다른 메서드 호출은 호출된 메서드가 @Transctional로 표시돼있더라고 런타임 시 실제 트랜잭션으로 이어지지 않는다.
참고
https://spring.io/blog/2012/05/23/transactions-caching-and-aop-understanding-proxy-usage-in-spring
https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=19505747
반응형
'[Spring Framework]' 카테고리의 다른 글
[Spring] Spring 애플리케이션에서 테스트하기 (1) | 2022.09.23 |
---|---|
[Spring] AspectJ, Spring AOP : AOP 라이브러리 비교 (1) | 2022.09.20 |
[Spring] Swagger 한글 깨짐 (0) | 2021.03.10 |
[Spring] Swagger 사용법 (0) | 2021.03.10 |
[Spring] loadUserByUsername의 username이 null인 경우. (0) | 2020.12.17 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- jdk13
- Thread
- Jenkins
- aspectj
- chmod
- hot-deploy
- jdk12
- java
- JUnit
- 확인창
- gradle
- IntelliJ
- thread priority
- ThreadPool
- JetBrains Mono
- Mockito
- junit5
- 파스칼 표기법
- codepoint
- JPA
- Visual Studio 2022
- Executor
- JAVA8
- 카멜 표기법
- 한글깨짐
- Redis
- spring
- sgw
- java11
- spring-security
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함