L'appel de la méthode Spring @Transaction au sein de sa propre classe échoue
La gestion déclarative des transactions de Spring Framework fournit un moyen pratique de définir le comportement transactionnel au niveau de la méthode . Cependant, un problème apparemment particulier survient lorsque l'on tente d'appeler une méthode transactionnelle à partir de la même classe.
Le problème
Dans l'extrait de code fourni, la méthode addUser est annoté avec @Transactional et est conçu pour effectuer des opérations de base de données. Dans la méthode addUsers, il y a une tentative d'invocation de addUser pour chaque utilisateur. Cependant, cela ne semble pas fonctionner comme prévu.
La cause
Ce comportement est dû à une limitation de Spring AOP (Aspect-Oriented Programming), en particulier lors de l'utilisation d'objets dynamiques et de la bibliothèque CGLIB. CGLIB crée des sous-classes de classes existantes pour implémenter l'interception de méthodes pour AOP. Lorsqu'une méthode est invoquée dans la même classe où elle a été créée, comme dans ce cas, le proxy AOP est contourné.
La solution
Pour résoudre ce problème , il existe plusieurs approches possibles :
Conclusion
Comprendre les limites de Spring AOP et trouver des solutions appropriées pour appeler des méthodes transactionnelles à partir de la même classe est essentiel pour une gestion efficace des transactions dans Applications de printemps. Les approches alternatives abordées dans cet article offrent des moyens de surmonter cet obstacle spécifique.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!