代码标题中的问题:
@Transactional (readonly = true)
public interface FooService {
void doSmth ();
}
public class FooServiceImpl implements FooService {
...
}
对比
public interface FooService {
void doSmth ();
}
@Transactional (readonly = true)
public class FooServiceImpl implements FooService {
...
}
JdkDynamicAopProxy
在每次方法调用时都会遍历所有的bean advisors(参见DefaultAdvisorChainFactory#getInterceptorsAndDynamicInterceptionAdvice()
),在声明式事务设置的情况下,这些advisors中包括BeanFactoryTransactionAttributeSourceAdvisor
。接着会调用TransactionAttributeSourcePointcut#matches()
方法来收集与事务相关的信息。该方法会传入目标类,并且始终可以遍历该类实现的所有接口。现在:为什么这种方式不能可靠地工作呢? - dma_k@Transactional
注释,哪一个应用?所以,虽然这一切都是可能的,但我不责怪Spring。http://jira.springsource.org/browse/SPR-975 - Peter Davis