>Java >java지도 시간 >Private Spring Bean 메서드에서 @Transactional이 작동하지 않는 이유는 무엇입니까?

Private Spring Bean 메서드에서 @Transactional이 작동하지 않는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-17 12:26:26226검색

Why Doesn't @Transactional Work on Private Spring Bean Methods?

Private 메소드에 대한 Spring @Transactional 주석

@Transactional 주석이 Spring Bean의 Private 메소드에 적용되는 경우 효과가 있습니다. 이는 Spring Bean에 대한 프록시 생성을 담당하는 프록시 생성기가 프록시 생성 시 개인 메소드를 무시하기 때문입니다.

예를 들어 다음 Spring Bean을 고려하십시오.

public class Bean {
    public void doStuff() {
        doPrivateStuff();
    }

    @Transactional
    private void doPrivateStuff() {

    }
}

애플리케이션 컨텍스트가 생성되면 Bean 클래스에 대한 프록시가 생성됩니다. 그러나 doPrivateStuff 메소드의 @Transactional 주석은 무시되며 메소드는 구성된 트랜잭션 설정을 표시하지 않습니다.

이 동작은 Spring 매뉴얼 10.5.6장에 설명되어 있습니다:

When using proxies, you should apply the @Transactional annotation only to methods with public visibility. If you do annotate protected, private or package-visible methods with the @Transactional annotation, no error is raised, but the annotated method does not exhibit the configured transactional settings. Consider the use of AspectJ (see below) if you need to annotate non-public methods.

위 내용은 Private Spring Bean 메서드에서 @Transactional이 작동하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.