Bạn không thể. Phản ánh không có quyền truy cập vào các biến cục bộ, bao gồm các tham số phương thức.
Nếu bạn muốn chức năng đó, bạn cần để đánh chặn các cuộc gọi phương pháp mà bạn có thể làm theo một trong những cách sau:
- AOP (AspectJ/Spring AOP vv)
- Proxy (JDK, CGLib vv)
Trong tất cả những điều này, bạn sẽ thu thập các tham số từ cuộc gọi phương thức và sau đó yêu cầu gọi phương thức để thực thi. Nhưng không có cách nào để lấy các tham số của phương thức thông qua sự phản chiếu.
Cập nhật: đây là một khía cạnh mẫu để giúp bạn bắt đầu sử dụng xác nhận chú thích dựa trên với 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
}
}
Nguồn
2011-08-29 12:56:16
Tôi không hiểu câu hỏi. Giá trị của 'bar' sẽ chỉ có sẵn trong thời gian chạy. Bạn có muốn chặn cuộc gọi đến 'example' không? Hoặc bạn có nghĩa là datatype 'Bar'? – home