Maison >Java >javaDidacticiel >Pourquoi @Transactional ne fonctionne-t-il pas sur les méthodes privées Spring Bean ?

Pourquoi @Transactional ne fonctionne-t-il pas sur les méthodes privées Spring Bean ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-17 12:26:26233parcourir

Why Doesn't @Transactional Work on Private Spring Bean Methods?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn