Maison >Java >javaDidacticiel >Pourquoi @Transactional ne fonctionne-t-il pas sur les méthodes privées Spring Bean ?
Annotation Spring @Transactional sur les méthodes privées
Si une annotation @Transactional est appliquée à une méthode privée dans un bean Spring, elle ne le sera pas avoir un quelconque effet. En effet, le générateur de proxy, chargé de créer des proxys pour les beans Spring, ignore les méthodes privées lors de la génération du proxy.
Par exemple, considérons le bean Spring suivant :
public class Bean { public void doStuff() { doPrivateStuff(); } @Transactional private void doPrivateStuff() { } }
Quand le contexte d'application est créé, un proxy sera créé pour la classe Bean. Cependant, l'annotation @Transactional sur la méthode doPrivateStuff sera ignorée et la méthode n'affichera pas les paramètres transactionnels configurés.
Ce comportement est documenté dans le chapitre 10.5.6 du Spring Manual :
When using proxies, you should apply the @Transactional annotation only to methods with public visibility. If you do annotate protected, private or package-visible methods with the @Transactional annotation, no error is raised, but the annotated method does not exhibit the configured transactional settings. Consider the use of AspectJ (see below) if you need to annotate non-public methods.
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!