@Transactional
애너테이션을 트랜잭션 속성 정보로 사용하도록 지정하면 스프링은 @Transactional
이 부여된 모든 오브젝트를 자동으로 타깃 오브젝트로 인식합니다.
이때 TransactionAttributeSourcePointcut
을 포인트컷으로 사용합니다.
스프링은 @Transactional
이 붙은 메서드를 포인트컷으로 등록해놓았다가 해당 애너테이션이 있는 빈이 등록될 때, 해당 클래스가 트랜잭션 부가기능(어드바이스)이 적용될 수 있는 포인트컷에
해당하는지 검사한 후, 해당한다면 트랜잭션 부가기능을 담은 프록시를 빈 후처리기를 통해 반환합니다.
이에따라 다른 빈에서 이를 호출할때, 프록시를 통해서 해당 메서드를 invoke하며 이때 트랜잭션 기능이 추가되게 됩니다.
네 @Transactional
이 붙어있으면 프록시가 생성됩니다. 다만 애너테이션이 붙어있지 않은 메서드라면 포인트컷에 등록되지 않기 때문에 프록시에서는 트랜잭션 부가 기능없이 단순히 메서드 호출을 위임하기만 합니다.
TODO: 다른 관련 인터뷰 질문에서 처리하고 링크 달기.