2011-06-02 766 views
1

我想在MethodInterceptor類中檢索參數的方法名稱。如何在MethodInterceptor中獲取方法的參數名稱?

public Object invoke(MethodInvocation invocation) throws Throwable { 
    Method method = invocation.getMethod(); 
    Class<?> declaringClass = method.getDeclaringClass(); 
    Logger logger = LoggerFactory.getLogger(declaringClass); 
    //here some treatment 
    return invocation.proceed(); 
} 

我只是找不到如何用MethodInvocation實例檢索方法參數的名稱。我不知道這是可能的..

回答

2

你不能。 Java不會在運行時保留參數名稱,因此,攔截器(或反射API)無法獲得該名稱。 解決此問題的一種方法是將您的參數包裝在一個類中,並且具有與您的參數名稱相對應的名稱的字段。

0

可能的,因爲我在這裏學到:Getting the name of a method parameter

貝婁是使用Spring ParameterNameDiscoverer一個例子:

private Object getParameterName(Method specificMethod, int i) { 
    // Project needs to be build with a -g (debug) option to contain information about parameter names. 
    ParameterNameDiscoverer discoverer = new LocalVariableTableParameterNameDiscoverer(); 

    String parameterName = discoverer.getParameterNames(specificMethod)[i]; 
    if (parameterName != null) { 
     return parameterName; 
    } 
    throw new IllegalArgumentException("Unable to determine parameter name. Please build the project with -g (debug) option."); 
} 
相關問題