Jak już z powodzeniem wdrożony spring transaction
,
W Spring
możemy realizować transakcję na trzy sposoby:
- platforma zarządzania transakcji.
- Declarative Zarządzanie transakcjami.
- Programmatic Zarządzanie transakcjami.
Co realizowany jest nazywany deklaratywna Transaction Management poprzez XML.
W skrócie wprowadzono implementację transaction
przez funkcję Spring AOP.
Połączenie konfiguracji tx:advice XML
z konfiguracją AOP opartą na XML powoduje połączenie synergiczne. Na przykład możemy użyć nazw metod, aby automatycznie dowiedzieć się, jaki rodzaj transakcji chcemy zastosować w tej metodzie.
Say chcemy zastosować transakcję na wszystko to metody, które rozpoczynają się save
i modify
takich jak savePizza()
, saveColdDrink()
, modifyOrder()
, modifyBill()
. Dla nich musimy zdefiniować advice
w naszym pliku xml:
<tx:advice id="txAdvice" >
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="modify*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
Nasza rada jest gotowy, jak powiedzieliśmy wyżej za pomocą linii, które chcemy transakcje wyłącznie na metodach, które zaczynają się save
lub modify
. Teraz powiemy, które fasole wymagają powyższej porady, używając elementu pointcut
z aop-config
.Na przykład, powiedzmy, że chcemy zastosować porady dotyczące transakcji do wszystkich klas, które są dostępne w pakiecie com.mytransaction.service
.
Do tego musimy dodać następującą linię wewnątrz naszego pliku xml:
<aop:config>
<aop:pointcut id="allServices"
expression="execution(*com.mytransaction.service.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="allServices"/>
</aop:config>
W-krótki, <tx:advice>
myśli, co robić lub których zachowanie transakcji chcemy zastosować. pointcut
elementem wewnątrz <aop-config>
mówi gdzie chcemy zastosować transakcję, powiedzieć <aop:advisor advice-ref="txAdvice" pointcut-ref="allServices"/>
Czego punktu przekroju-ref oznacza? – luksmir
Jak wymusić zamknięcie transakcji –
@ Betlista - Jaka jest potrzeba "tx: method". Dlaczego nie można tego osiągnąć za pomocą wyrażeń pointcut? Powiedzmy, że w tym przykładzie mogę zdefiniować pointcut, aby pasował do wszystkich metod zaczynając od "save" i "modify". Czy to nie wystarczy? – user001