2014-09-06 2 views
0

스프링이 @transactional 주석이있는 내 메서드를 어떻게 변경하는지 알고 싶습니까? 예를 들어 @transactional을 사용하지 않고 트랜잭션 방식을 실행하는 방법에 대해서는 here을 읽습니다. 봄이 정확히 무엇입니까?@transactional은 어떻게 작동합니까?

+0

기본적으로 스프링은 동적 프록시를 만듭니다. 동적 프록시는 클래스 대신 사용되며 메소드 주위에 트랜잭션 동작을 추가합니다. 이 문서는 http://docs.spring.io/spring/docs/current/spring-framework-reference/html/transaction.html#transaction-strategies, http://docs.spring.io/의 모든 세부 정보를 제공합니다. spring/docs/current/spring-framework-reference/html/transaction.html # tx-decl-described – geoand

+0

@geoand 호기심에서 벗어나 응답을 게시하는 대신 댓글에 질문에 답하는 이유는 무엇입니까? –

+0

@ 리카르도 (Ricardo) 나는 진정한 대답을 보증하기 위해 더 많은 내용을 써야 할 것이다. 아프다. – geoand

답변

1

봄은 효과적으로 개체에 대한 프록시를 만듭니다. 따라서 "MyApplication"클래스가 "DBService"를 주입하고 DBService에 @Transactional이 있으면 Spring은 DBService 프록시를 만듭니다. 프록시가 MyApplication에 삽입되고 DBService의 메소드 호출은 대신 해당 Proxy를 호출합니다. 그런 다음 Proxy는 실제 DBService 메소드를 호출하기 전에 트랜잭션을 시작하거나 필요한 모든 작업을 수행 할 수 있습니다.

MyApplication -> DBService Proxy (intercepts calls) -> DBService 

프록시 구성 방법에 대한 자세한 내용은 스프링 버전 및 코드 설정 방법에 따라 달라질 수 있습니다. 비록 인터페이스를 사용하지 않는다면, 스프링은 CGLIB 라 불리는 라이브러리를 사용하여 실제 클래스를 확장 할 수 있습니다. Pre 4, 이것은 기본 생성자를 필요로합니다. 최신 스프링 4 기본 생성자는 필요 없으며 약간 다른 메커니즘을 통해 수행합니다.

관련 문제