Heim >Java >javaLernprogramm >Warum funktioniert @Transactional nicht mit privaten Spring Bean-Methoden?
Spring @Transactional-Annotation auf private Methoden
Wenn eine @Transactional-Annotation auf eine private Methode in einer Spring-Bean angewendet wird, wird dies nicht der Fall sein irgendeine Wirkung haben. Dies liegt daran, dass der Proxy-Generator, der für die Erstellung von Proxys für Spring Beans verantwortlich ist, beim Generieren des Proxys private Methoden ignoriert.
Betrachten Sie beispielsweise das folgende Spring Bean:
public class Bean { public void doStuff() { doPrivateStuff(); } @Transactional private void doPrivateStuff() { } }
Wann Nachdem der Anwendungskontext erstellt wurde, wird ein Proxy für die Bean-Klasse erstellt. Allerdings wird die @Transactional-Annotation für die doPrivateStuff-Methode ignoriert und die Methode zeigt nicht die konfigurierten Transaktionseinstellungen an.
Dieses Verhalten ist im Spring Manual Kapitel 10.5.6 dokumentiert:
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.
Das obige ist der detaillierte Inhalt vonWarum funktioniert @Transactional nicht mit privaten Spring Bean-Methoden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!