2016-11-09 1 views
0

У меня есть ниже иерархия вызова методаПочему Spring здесь совершает транзакцию?

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); 
    } 


    } 

В приведенном выше сценариях, мое ожидание пружина должна совершить сделку как нить выходит из method1 или отката, если исключение происходит в любом месте в иерархии.

Но весна совершает транзакцию, как только обновление выполняется в методе2. Почему я не понимаю?

UPDATE: - Даже если я изменю @Transactional к @Transactional(propagation=Propagation.REQUIRES_NEW) его еще совершения сделки. So No impact

+1

Пожалуйста, внесите правильный код, если вы хотите получить ответы. – Kayaman

+0

@ Kayaman Я разместил соответствующий код. Есть ли какой-то конкретный материал, который вы ищете здесь? – emilly

+0

Этот код даже не компилируется, так что это явно не настоящий код, и было бы бесполезно комментировать его. – Kayaman

ответ

0

При использовании Spring AOP на основе прокси, вызов другого метода на одном и том же объекте не приводит к тому, что аспекты будут применяться. Реализация @Transactional для UpdateProcess будет создана в прокси-сервере, который находится между UpdateProcess и другими компонентами. Поэтому, если вы вызываете метод из «внутри» компонента, а не «вне» его, вызов не проходит через прокси, и аспекты не применяются.