7 Stimmen

Konfigurationsalternative zu Spring @Transactional

Gibt es eine konfigurationsbasierte Alternative zur @Transactional-Annotation in Spring?

Ich möchte meine Java-Klassen so frei wie möglich von Spring halten, d.h. so entkoppelt wie möglich von jedem Framework.

8voto

Bozho Punkte 570413

Ja, mit aop:config y tx:advice . Zum Beispiel:

<aop:config>
    <aop:pointcut id="serviceMethods"
        expression="execution(* com.package.service..*.*(..))" />

    <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods" />
</aop:config>

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="*" propagation="REQUIRED" />
    </tx:attributes>
</tx:advice>

3voto

Espen Punkte 10195

Eine Annotation ist die beste Wahl, um zu markieren, dass eine Methode in einer Transaktion ausgeführt werden soll. Dies wird sowohl für Spring als auch für EJB 3 empfohlen.

Der XML-Ansatz erfordert viel mehr Konfiguration, ist nicht refactor-freundlich und man muss in der Konfiguration sehen, ob eine bestimmte Methode in einer Transaktion ausgeführt wird oder nicht.

Da annotationsbasierte Transaktionsunterstützung von den meisten Entwicklern bevorzugt wird und Sie nicht die Spring'sche @Transactional Anmerkung, empfehle ich Ihnen, eine benutzerdefinierte Anmerkung zu verwenden.

Dann haben Sie zwei Möglichkeiten:

  • Lassen Sie Ihre benutzerdefinierte Annotation die Spring @Transactional und verwenden Sie die <tx:annotation-driven /> Element in Ihrer Spring-Konfiguration. Dies ist einfach und es muss nur eine Anmerkung aktualisiert werden, um die Spring-Abhängigkeit zu entfernen.
  • Erstellen Sie einen Interceptor, der die Logik vor und nach der annotierten Methode ausführt. Mit Spring als Container sollten Sie die Transaktionsbehandlung von den Vorher- und Nachher-Anweisungen des Interceptors an Ihre bevorzugte PlatformTransactionManager Umsetzung.

Ich habe darüber geschrieben, wie Sie einen Interceptor erstellen können, der Logik vor und nach einer mit einer Annotation markierten Methode hinzufügt aquí . Und demonstriert, welche Methoden Sie auf dem PlatformTransactionManager verwenden müssen aquí .

Ich hoffe, das hilft!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X