據我所知,Spring使用JDK爲實現任何推論的類生成動態代理,同時使用Cglib爲不實現任何推論的類生成動態代理。對於decarative transcation,Spring使用代理來添加事務方面。請看下面的代碼:這個註釋是否適用於Spring聲明式事務
interface Demo {
void methodA();
}
public class DemoImpl implements Demo{
@Transactional
public void updateA() {}
@Transactional
public void updateB() {}
}
我覺得updateA可以很好地處理事務。但是updateB方法呢? @Transactional是否適用於它? 也許我的理解是不正確的。如果提供相關的Spring源代碼來解釋Spring如何使用JDK/cglib來代理類和接口,那就太好了。由於
我對XML的配置:
<tx:annotation-driven transaction-manager="transactionManager" />
謝謝托馬斯。如果我有這個配置,Spring會爲我選擇哪種情況: –
Jacky
@Jacky:默認情況下,Spring使用JDK代理。如果設置了'proxy-target-class'屬性,它將升級到CGLIB代理,參見:[11.5.6使用@Transactional](http://static.springsource.org/spring/docs/current/spring-framework-reference /html/transaction.html#transaction-declarative-annotations)。 –