Nie możesz. Odbicie nie ma dostępu do zmiennych lokalnych, w tym parametrów metod.
Jeśli chcesz tę funkcjonalność, trzeba przechwycić wywołanie metody, które można zrobić w jeden z kilku sposobów:
- AOP (AspectJ/wiosennym AOP etc.)
- proxy (JDK, CGLib etc)
We wszystkich z nich, by zebrać z parametrów wywołania metody, a następnie powiedzieć wywołanie metody do wykonania. Ale nie ma sposobu, aby uzyskać parametry metody poprzez odbicie.
Aktualizacja: oto aspekt próbki, aby można rozpocząć korzystanie walidacji adnotacji oparte o AspectJ
public aspect ValidationAspect {
pointcut serviceMethodCall() : execution(public * com.yourcompany.**.*(..));
Object around(final Object[] args) : serviceMethodCall() && args(args){
Signature signature = thisJoinPointStaticPart.getSignature();
if(signature instanceof MethodSignature){
MethodSignature ms = (MethodSignature) signature;
Method method = ms.getMethod();
Annotation[][] parameterAnnotations =
method.getParameterAnnotations();
String[] parameterNames = ms.getParameterNames();
for(int i = 0; i < parameterAnnotations.length; i++){
Annotation[] annotations = parameterAnnotations[i];
validateParameter(parameterNames[i], args[i],annotations);
}
}
return proceed(args);
}
private void validateParameter(String paramName, Object object,
Annotation[] annotations){
// validate object against the annotations
// throw a RuntimeException if validation fails
}
}
Nie rozumiem pytanie. Wartość 'bar' będzie dostępna tylko podczas pracy. Czy chcesz przechwycić połączenia do 'przykladu'? Czy masz na myśli typ danych "Bar"? – home