Heim > Java > javaLernprogramm > Warum schlagen @Transactional-Methoden fehl, wenn sie im Frühjahr innerhalb derselben Klasse selbst aufgerufen werden?

Warum schlagen @Transactional-Methoden fehl, wenn sie im Frühjahr innerhalb derselben Klasse selbst aufgerufen werden?

Linda Hamilton
Freigeben: 2024-12-19 04:47:09
Original
379 Leute haben es durchsucht

Why Do @Transactional Methods Fail When Self-Invoked Within the Same Class in Spring?

Probleme beim Aufruf von Transaktionsmethoden innerhalb derselben Klasse

Problem:

Im Frühjahr wurde versucht, eine mit annotierte Methode aufzurufen @Transaction innerhalb derselben Klasse kann zu einer ineffektiven Transaktion führen.

Code Beispiel:

public class UserService {

    @Transactional
    public boolean addUser(String userName, String password) {
        // ...
    }

    public boolean addUsers(List<User> users) {
        for (User user : users) {
            addUser(user.getUserName, user.getPassword);
        }
    }
}
Nach dem Login kopieren

Verstehen des Problems:

Dieses Problem entsteht aufgrund von Einschränkungen bei der dynamischen Objektverarbeitung von Spring AOP und der Verwendung von cglib. Der standardmäßige Transaktionsverarbeitungsmechanismus von Spring verwendet mit cglib erstellte dynamische Proxys, die beim Aufruf einer Transaktionsmethode innerhalb derselben Klasse zu Inkonsistenzen führen können.

Lösung:

Verwenden von AspectJ für die Transaktionsverarbeitung:

Um dieses Problem zu beheben, können Sie Spring für die Verwendung konfigurieren AspectJ zur Abwicklung von Transaktionen. Dies beinhaltet:

  • Einstellen des Modus auf „aspectj“ in tx:annotation-driven:

    <tx:annotation-driven mode="aspectj"/>
    Nach dem Login kopieren
  • Hinzufügen der folgenden Bean-Konfiguration (nur für Frühlingsversionen unten 3.0):

    <bean class="org.springframework.transaction.aspectj.AnnotationTransactionAspect" factory-method="aspectOf">
      <property name="transactionManager" ref="transactionManager"/>
    </bean>
    Nach dem Login kopieren

Refactoring:

Eine alternative Lösung besteht darin, Ihren Code umzugestalten. Anstatt die Transaktionsmethode innerhalb derselben Klasse aufzurufen, sollten Sie erwägen, separate Klassen für die Benutzerhandhabung und -verarbeitung zu erstellen, um die Standardtransaktionshandhabung mit Spring AOP zu ermöglichen.

Das obige ist der detaillierte Inhalt vonWarum schlagen @Transactional-Methoden fehl, wenn sie im Frühjahr innerhalb derselben Klasse selbst aufgerufen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage