'Spring Framework/Spring Core'에 해당되는 글 1건

  1. 2014.07.08 Private method, Internal called method에서의 @Transactional 1

본 포스팅은 아래의 포스트를 참조하여 작성되었습니다.

http://amitstechblog.wordpress.com/2011/05/20/spring-transactions-behavior-on-private-and-internal-methods/



스프링 트랜잭션의 기본 모드인 proxy 모드에서는 오직 외부로부터의 method 호출이 발생한 경우에만 method가 인터셉트 되어 트랜잭션 관리가 적용된다. 즉, 다시 말해서 오브젝트 내의 한 method가 동일 오브젝트 내의 다른 method를 호출할 경우에는 피 호출 method에 @Transactional 어노테이션이 명시되어 있더라도 실행시 트랜잭션이 스프링에 의해 관리되지 않는다.


-from reference document@spring.io , 발번역


Private Method에서의 @Transactional

스프링 트랜잭션의 기본 모드에서는 private method에 @Transactional 을 붙여 봐야 스프링이 트랜잭션을 관리해 주지 않습니다. 다시 말해, @Transactional annotation 을 non-public(public visibility가 아닌 protected, private, package) method에 적용할 경우 실행시 따로 에러가 발생하지는 않지만 트랜잭션 정책이 적용되지 않습니다. 만약 이러한 non-public method에 @Transactional을 적용하려 한다면 프록시 대신 AspectJ 방식을 고려해 봐야 합니다.


Internal Method에서의 @Transactional 


public visiblilty를 가진 method지만 object 내부의 다른 method에 의한 호출로 수행되는 경우에는 private method와 마찬가지로 @Transactional 정책이 적용되지 않습니다.




결론


위 내용을 간단히 요약하면 다음과 같습니다.

  1. @Transctional은 프록시 모드로 동작한다.
  2. 그래서 외부에서 오브젝트 내의 method에 들어갈때와 나올때 적용된다. 
  3. 오브젝트 내부 호출은 적용되지 않기 때문에 Private method, Internal called Method는 @Transactional에 의한 스프링 트랜잭션 관리가 되지 않는다.


Posted by 제리곰
,