2012-10-13 10 views
6

Sono nuovo di primavera, con conoscenza operativa di ibernazione. Il mio compito era quello di implementare la transazione utilizzando l'approccio dichiarativo di primavera. E con successo l'ho fatto con l'aiuto di Google, grazie a Google. Ma non sono in grado di capire chiaramente i termini che ho usato in application-context.xml.Differenza tra molla tx: avviso e molla a punta di taglio

1.

<tx-advice> 

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

Qualcuno può spiegare su punto di cui sopra, nel frattempo sto cercando di capirlo da Google anche.

risposta

23

Come già implementato con successo spring transaction,

In Spring possiamo realizzare transazioni in tre modi:

  1. Platform Transaction Management.
  2. Declarative Gestione transazioni.
  3. Programmatic Gestione transazioni.

Quello che si chiama implementato Declarative Transaction Management tramite XML.

In breve, l'implementazione di transaction è stata eseguita dalla funzione Spring AOP.

L'accoppiamento della configurazione tx:advice XML con una configurazione AOP basata su XML rende la combinazione sinergica. Ad esempio, possiamo usare i nomi dei metodi per capire automaticamente quale tipo di transazione vogliamo applicare su quel metodo.

Dire vogliamo applicare la transazione su tutto ciò che i metodi che iniziano con save e modify quali savePizza(), saveColdDrink(), modifyOrder(), modifyBill(). Per questi dobbiamo definire il advice nel nostro file xml:

<tx:advice id="txAdvice" > 
    <tx:attributes> 
    <tx:method name="save*" propagation="REQUIRED"/> 
    <tx:method name="modify*" propagation="REQUIRED"/> 
    </tx:attributes> 
</tx:advice> 

Il nostro consiglio è pronto, come abbiamo detto sopra, utilizzando la linea che vogliamo transazioni solo sui metodi che iniziano con save o modify. Ora stiamo per dire quali bean richiedono il consiglio sopra usando l'elemento pointcut di aop-config.Ad esempio, diciamo che vogliamo applicare il consiglio di transazione a tutte le classi disponibili nel pacchetto com.mytransaction.service.

Per questo, dobbiamo aggiungere la seguente riga all'interno del nostro file xml:

<aop:config> 
    <aop:pointcut id="allServices" 
    expression="execution(*com.mytransaction.service.*.*(..))"/> 
    <aop:advisor advice-ref="txAdvice" pointcut-ref="allServices"/> 
</aop:config> 

In breve, <tx:advice> dire cosa fare o che il comportamento delle transazioni vogliamo applicare. pointcut elemento all'interno <aop-config> dice dove vogliamo applicare la transazione, dicono <aop:advisor advice-ref="txAdvice" pointcut-ref="allServices"/>

+0

Cosa significa il pointcut-ref significa? – luksmir

+0

Come forzare la chiusura della transazione –

+1

@Betlista - Qual è la necessità di "tx: method". Perché non può essere raggiunto tramite pointpr expr? Diciamo che in questo esempio posso definire pointcut per abbinare tutti i metodi che iniziano con "salva" e "modifica". Non è sufficiente? – user001

2

Il tag <tx:advice> è specifico per la configurazione Transaction Management mentre il tag <aop:config> può essere usato per fare Aspect-Oriented Programming in generale.

AOP può essere utilizzato per molte più cose delle transazioni, ad esempio la registrazione o il controllo di accesso. Inoltre, la gestione delle transazioni non deve necessariamente essere implementata utilizzando AOP, è solo il modo in cui di solito viene eseguita in primavera (ma Spring supporta anche Programmatic Transaction Management).

Problemi correlati