Il y a une énorme différence entre les proxies et les aspects de tissage de code à octet. Les mandataires ne peuvent intercepter que si l'invocation provient de "l'espace extérieur", 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. Méthode T
a une annotation de transaction, et la méthode B
invoque T
par “this.T()
", alors le proxy n'est jamais invoqué (pour T
), il n'y a donc pas de gestion des transactions dans ce cas !
Si vous utilisez AspectJ, le code de gestion des transactions est tissé dans le code d'octet de l'application. T
et elle sera exécutée, que l'invocation provienne de l'objet lui-même ou d'un autre objet.