2012-10-13 17 views
6

Jestem nowy na wiosnę, z praktyczną wiedzą o hibernacji. Moja praca polegała na realizacji transakcji przy użyciu metody deklaratywnej wiosennej. Z powodzeniem zrobiłem to dzięki Google, dzięki Google. Ale nie jest w stanie jasno zrozumieć terminów używanych w application-context.xml.Różnica między wiosną tx: porady i wiosna aop pointcut

1.

<tx-advice> 

</tx-advice> 
  1. <aop-config> 
        // here is point cut were declared 
    </aop-config> 
    

może ktoś wytłumaczyć mi o powyższym punkcie, w międzyczasie staram się zrozumieć go z google również.

Odpowiedz

23

Jak już z powodzeniem wdrożony spring transaction,

W Spring możemy realizować transakcję na trzy sposoby:

  1. platforma zarządzania transakcji.
  2. Declarative Zarządzanie transakcjami.
  3. 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"/>

+0

Czego punktu przekroju-ref oznacza? – luksmir

+0

Jak wymusić zamknięcie transakcji –

+1

@ 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

2

Znacznik <tx:advice> jest specyficzny dla konfiguracji Transaction Management, podczas gdy znacznik <aop:config> może być używany do generowania .

AOP może być używany do wielu innych czynności niż transakcje, na przykład rejestrowanie lub kontrola dostępu. Ponadto zarządzanie transakcjami nie musi być koniecznie implementowane za pomocą AOP, tak jak zwykle jest to zrobione wiosną (ale Spring obsługuje także Programmatic Transaction Management).