我想建议以下方法
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
以在advice方法中使用。
我使用以下执行表达式:
@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)
进行Spring启动。
顺便说一句,我有@AfterThrowing
建议正确运行。所以我高度认为问题出在我的执行表达式上。
更新 我有一个非常奇怪的发现:当我使用String类型的任何参数时,建议不起作用,否则(长或双)它起作用。
任何解释?
答案 0 :(得分: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的顺序:
args(pendingTrx,globalTrxId,..)
args(.., pendingTrx,globalTrxId)