@Transactional 어노테이션에 붙은 클래스는 무엇이었습니다.
6360 단어 springframeworkspring
@Transactional 어노테이션에 붙은 클래스, 프록시 클래스를 만들었다
게시판 샘플 애플리케이션 를 보고, 클래스 info.saladlam.example.spring.noticeboard.service.MessageServiceImpl에 @Transactional 어노테이션이 붙었다. BeanFactory는 이 클래스를 처리해, org.springframework.transaction.interceptor.TransactionInterceptor가 붙인 프록시 클래스를 만들었다. 아래 다이어그램은 Eclipse 디버거에서 실제 MessageService 인스턴스를 보여줍니다.
TransactionInterceptor의 역할
아래 코드는 메서드 org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(Method, Class, InvocationCallback)의 일부입니다.
// ...
// If the transaction attribute is null, the method is non-transactional.
TransactionAttributeSource tas = getTransactionAttributeSource();
final TransactionAttribute txAttr = (tas != null ? tas.getTransactionAttribute(method, targetClass) : null);
final org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(Method, Class<?>, InvocationCallback) tm = determineTransactionManager(txAttr);
final String joinpointIdentification = methodIdentification(method, targetClass, txAttr);
if (txAttr == null || !(tm instanceof CallbackPreferringPlatformTransactionManager)) {
// Standard transaction demarcation with getTransaction and commit/rollback calls.
TransactionInfo txInfo = createTransactionIfNecessary(tm, txAttr, joinpointIdentification);
Object retVal;
try {
// This is an around advice: Invoke the next interceptor in the chain.
// This will normally result in a target object being invoked.
retVal = invocation.proceedWithInvocation();
}
catch (Throwable ex) {
// target invocation exception
completeTransactionAfterThrowing(txInfo, ex);
throw ex;
}
finally {
cleanupTransactionInfo(txInfo);
}
commitTransactionAfterReturning(txInfo);
return retVal;
}
// ...
프로그램이
retVal = invocation.proceedWithInvocation();
실행할 때 info.saladlam.example.spring.noticeboard.service.MessageServiceImpl의 메서드가 호출됩니다.
PlatformTransactionManager의 역할
Spring Framework의 컨텍스트에서 싱글 톤 PlatformTransactionManager 인스턴스가 있습니다. 여기에 나타낸 샘플 어플리케이션은 org.springframework.jdbc.datasource.DataSourceTransactionManager라고 하는 실작. 이 인스턴스는 모든 트랜잭션에 대한 청구를 처리합니다.
Reference
이 문제에 관하여(@Transactional 어노테이션에 붙은 클래스는 무엇이었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/saladlam/items/cd4f305442e3d1548cae
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(@Transactional 어노테이션에 붙은 클래스는 무엇이었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/saladlam/items/cd4f305442e3d1548cae텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)