2016-11-09 2 views
0

I unten Methode Aufrufhierarchie habeWarum Spring hier eine Transaktion durchführt?

public class UpdateProcess { 

     public void startingMethod(List<Object> objects){ 
      for (Object obj : objects) { 
       method1(obj); 
      } 
     } 

     @Transactional 
     public void method1(Object obj) { 
      method2(obj); 
     } 


     public void method2(Object obj) { 
      EmployeeService.updateObject(obj) 
     } 
    } 

public class EmployeeService 

    @Transactional 
    public void updateObject(Object obj) { 

     return customerDao.update(obj); 
    } 


    } 

In obigem Szenario ist Meine Erwartung Frühjahr der Transaktion verpflichten sollte als Faden aus Method1 oder Rollback kommt, wenn Ausnahme überall in der Hierarchie auftritt.

Die Transaktion wird jedoch von Spring ausgeführt, sobald das Update in method2 ausgeführt wird. Ich verstehe nicht warum?

UPDATE: - Auch wenn ich @Transactional ändern @Transactional(propagation=Propagation.REQUIRES_NEW) seine immer noch die Transaktion zu begehen. Also keine Auswirkungen

+1

Bitte schreiben Sie den richtigen Code, wenn Sie Antworten erhalten möchten. – Kayaman

+0

@Kayaman Ich habe den entsprechenden Code veröffentlicht. Gibt es bestimmte Dinge, die Sie hier suchen? – emilly

+0

Dieser Code wird nicht einmal kompiliert, also ist es eindeutig nicht der echte Code und es wäre nutzlos, ihn zu kommentieren. – Kayaman

Antwort

0

Bei der Verwendung von Proxy-basierten Spring AOP verursacht das Aufrufen einer anderen Methode für dasselbe Objekt keine Anwendung von Aspekten. Die Implementierung von @Transactional für UpdateProcess wird in einem Proxy erstellt, der sich zwischen UpdateProcess und anderen Beans befindet. Wenn Sie also die Methode von "innerhalb" der Bean statt "außerhalb" aufrufen, wird der Aufruf nicht durch den Proxy geleitet und die Aspekte werden nicht angewendet.

Verwandte Themen