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.
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.
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>
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:
@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.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 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.