2010-11-11 7 views
12

Je suis en train de mettre en place un nouveau projet, JPA + Spring. Quelle est la différence (pour moi en tant que programmeur) entre:Spring: gestionnaire de transactions basé sur des annotations

<tx:annotation-driven transaction-manager="transactionManager" /> 

et

<tx:annotation-driven mode="aspectj" transaction-manager="transactionManager" /> 

dans mon applicationContext.xml?

Répondre

28

Il existe une énorme différence entre les proxies et les aspects du code octet. Les proxies ne peuvent intercepter que si l'invocation vient de "l'espace", mais pas si l'invocation provient de l'objet lui-même (this.transactionalMethod())

Cela signifie que si vous avez une classe avec deux méthodes, T et B "La méthode T a une annotation de transaction, et la méthode B invoque T par “this.T()", alors le proxy n'est jamais appelé (pour T) donc il n'y a pas de manipulation de transaction dans ce cas!

Si vous utilisez AspectJ, le code de gestion des transactions est défini dans le code de l'octet T, et il sera exécuté peu importe si l'invocation provient de l'objet lui-même ou d'un autre objet.

+0

merci beaucoup d'expliquer avec des mots clairs et simples. –

6

The docs disent:

Le mode par défaut processus « proxy » annotées haricots à proxied en utilisant le cadre de l'AOP Spring (suivant la sémantique proxy, comme discuté ci-dessus, l'application de la méthode des appels entrant par le proxy uniquement). Le mode alternatif "aspectj" tisse à la place les classes affectées avec l'aspect de la transaction AspectJ de Spring, en modifiant le code d'octet de la classe cible pour l'appliquer à tout type d'appel de méthode. AspectJ Weaving nécessite spring-aspects.jar dans le classpath ainsi que le tissage en temps de chargement (ou tissage à la compilation) activé. (Voir la Section 7.8.4.5, «Configuration du ressort» pour plus de détails sur la configuration du tissage en temps de chargement.)

Le mode utilisé par le développeur n'a pas d'importance.

+0

oh merci. pour une raison quelconque, je ne pouvais pas trouver cette information. –

Questions connexes