2016-10-23 4 views
0

Я хочу посоветовать следующий методвыражения выполнения Spring AOP с двумя аргументами

public BaseRepresentationObject createLedgerTransaction(Long fromUserId, Long toUserId, Double serviceAmount, 
     Double masaryCommission, Double merchantCommission, Double appliedFees, Double tax, Long ratePlanId, 
     Long serviceId, String pendingTrx, String globalTrxId) 

и извлечь два аргумента: pendingTrx, globalTrxId для использования в методе консультации.

Я использую следующее выражение выполнения:

@Around("execution(* com.masary.ledger.service.components.LedgerTransactionComponent.createLedgerTransaction(..)) && args(pendingTrx,globalTrxId,..)") 
    public Object doBasicProfilingLedgerCreate(final ProceedingJoinPoint pjp , String pendingTrx, String globalTrxId) throws Throwable 

Приложение построено успешно, но код советов не выполняется.

Я использую весенний ботинок с @EnableAspectJAutoProxy(proxyTargetClass=true) на моем классе конфигурации.

У меня есть @AfterThrowing Совет для правильной работы. Поэтому я очень думаю, что проблема связана с моим исполнением.

Update: У меня есть очень странный вывод: когда я использую любой аргумент типа String, совет не работает, в противном случае (Long или Double) он работает.

любое объяснение?

ответ

0

Это работает для меня, используя @Around:

@Aspect 
@Component 
public class MyAspect { 
    @Around("execution (* com.masary.ledger.service.components.LedgerTransactionComponent.createLedgerTransaction(..)) && args(.., pendingTrx, globalTrxId)") 
    public Object aroundCreateLedgerTransaction(ProceedingJoinPoint pjp, String pendingTrx, String globalTrxId) throws Throwable{ 
     System.out.println("it works!"); 
     return pjp.proceed(); 
    } 
} 

Или @Around с @Pointcut:

@Aspect 
@Component 
public class MyAspect { 

    @Pointcut("execution (* com.masary.ledger.service.components.LedgerTransactionComponent.createLedgerTransaction(..))") 
    public void pointcutCreateLedgerTransaction(){} 

    @Around("pointcutCreateLedgerTransaction() && args(.., pendingTrx, globalTrxId)") 
    public Object aroundCreateLedgerTransaction(ProceedingJoinPoint pjp, String pendingTrx, String globalTrxId) throws Throwable{ 
     System.out.println("it works!"); 
     return pjp.proceed(); 
    } 
} 

Я думаю ваша ошибка порядок ваших аргументах:

  • Вы указали: args(pendingTrx,globalTrxId,..)
  • и это должно быть args(.., pendingTrx,globalTrxId)
+0

спасибо миллиона ... у вас есть какой-либо документ на языке выражений аргументов методы в АОПЕ, потому что у меня есть еще подобные проблемы. –

+0

Я использовал это как ссылку: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html – alexbt