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

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

Barbara Streisand
풀어 주다: 2024-12-17 12:26:26
원래의
235명이 탐색했습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿