2014-01-29 2 views
1

В моих бизнес-методах я использовал аннотации для управления транзакциями.Spring AOP: Аннотированные точки для метода с аннотированным методом @Transactional?

@Service 
public class SampleBusinessLogicImpl implements SampleBusinessLogic { 


    @Override 
    @Transactional(rollbackFor=Exception.class) 
    public Sample createSample(Sample sample) throws SampleException { 
      ... 
     } 
} 

Я хотел выполнить еще один аспект этого метода, я определил аспект следующим образом:

@Aspect 
public class SampleDynamicValidationAspect { 

    private static final Logger logger = LoggerFactory.getLogger(RequestValidationAspect.class); 


    @Before("execution(public * com.rakuten.gep.sample.businesslogic.impl.SampleBusinessLogicImpl.createSample(com.rakuten.gep.sample.entity.common.Sample,..)) && args(sample,..) throws *Exception") 
    public void validate(Sample sample) throws SampleException { 
     //Dynamic validation here. 
     //If some validation is failed, wrapped the appropiate exception in SampleException 
     logger.debug("Involking Dynamic Validator"); 
     System.out.println("************** Dynaic Validator *************"); 
    } 
} 

Я могу видеть Транзакции отлично работает, глядя на бревнах, но недавно заявил посоветуете не получить исполнение.

Любые вещи?

+1

Вы можете проверить конфигурацию пружины и посмотреть, если аспект настроен как фасоль? разместите здесь свою конфигурацию, так как проблема может быть и там. – svjn

ответ

1

попытаться изменить Validate (образец) для проверки (JointPoint)

1

Вы можете достичь этого по-разному. Например, вы можете найти различные параметры pointcut, которые вы можете проверить. Ниже вы можете найти различные варианты, которые вы можете попытаться сделать, чтобы ваш аспект работал.

Выполнив все соответствия @Transactional

execution(@Transactional * *.*(..)) 

Выполняя каждый публичный метод (вы можете использовать это, чтобы проверить, если у вас есть база Аспект настроена хорошо).

execution(public * *(..)) 

Добавляя Pointcut, как это, а затем применить его к аспекту:

@Pointcut("execution(@Transactional* *.*(..))") 
public void monitorRequestTargets(){} 

@Around("monitorRequestTargets()") 
public void validate(Sample sample) throws SampleException { 

Позвольте мне знать, если любой из затем работал нормально.

0

Ваше выражение должно быть срез точек

@Before("execution(public * com.rakuten.gep.sample.businesslogic.impl.SampleBusinessLogicImpl.createSample(com.rakuten.gep.sample.entity.common.Sample,..) throws *Exception) && args(sample,..)") 
Смежные вопросы