2017-08-16 51 views
0

我有一個切入點表達式來調用包中的所有方法。切入點表達式來獲取參數和註釋值

某些方法可能有註釋和需要獲得建議的參數。

我的東西試過這樣

@Around("execution(* com.man.test..jmx..*(..)) && args(name,..) && @annotation(requiredJMX)") 

這種表達的問題是,如果有名稱和註釋參數存在,它將調用。

我可以調用包中的所有方法,同時name參數和annotation是可選的嗎?

像這樣的事情

@Around("execution(* com.man.test..jmx..*(..)) || args(name,..) || @annotation(requiredJMX)") 
+0

是不是你想要的第二個表達式? – dimitrisli

+0

我需要第二個表達式,但它沒有工作 –

回答

1

如果你想獲得註釋和args的方法, 的價值你可以做這樣的:

@Around("execution(* com.man.test..jmx..*(..)) public Object yourMethod(ProceedingJoinPoint joinpoint){

MethodSignature signature = (MethodSignature) joinPoint.getSignature(); 
Method method = signature.getMethod(); 
MyAnnotation annotation = method.getAnnotation(MyAnnotation.class); 
if(null != annotation && method.getParameters().length > 0 
    && "name".equals(method.getParameters()[0].getName())){ 

    //do your work 
} 

}

+0

「name」.equals(method.getParameters()[i] .getName()劑量匹配 –

+0

「name」是您的方法的第一個參數的名稱.. –

+0

是的,這是行不通的,它返回args0 –