如果我有这样的课程:
public class Whatever
{
public void aMethod(int aParam);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法知道,aMethod使用一个名为参数aParam,即类型的int?
我有一个方面基于目标方法的细节进行各种计算,因此提前提取这些如下:
@Around("execution(* com.xyz.service.AccountService.*(..))")
public void validateParams(ProceedingJoinPoint joinPoint) throws Throwable {
final MethodSignature signature = (MethodSignature) joinPoint.getSignature();
final String methodName = signature.getName();
final String[] parameterNames = signature.getParameterNames();
final Object[] arguments = joinPoint.getArgs();
...
...
...
joinPoint.proceed();
}
Run Code Online (Sandbox Code Playgroud)
在提取的细节中,所有细节都反映了除了始终返回null的parameterNames之外的预期信息.我希望它按照下面的签名返回{accountDetails}.谁会知道我可能会遗漏什么,或者这是一个错误?
这是我正在反对的目标方法的签名:
Long createAccount(RequestAccountDetails accountDetails);
Run Code Online (Sandbox Code Playgroud) 据我所知,我们不能用Java做到这一点.我们可以在scala中执行此操作吗?
假设有一种方法如下:
def insert(name:String, age:Int) {
// insert new user
}
Run Code Online (Sandbox Code Playgroud)
是否可以获取参数名称name和agescala?
UPDATE
我想这样做,因为我想自动绑定方法的参数.
例如,这是一个Web应用程序,它有一些定义为:
class UsersController extends Controller {
def create(name: String, age: Int) {
// insert the user
}
}
Run Code Online (Sandbox Code Playgroud)
客户点击submit了创建用户表单的按钮.网址将/users/create与一些参数发送.
在服务器端,当我们得到一个名为url的url时/users/create,我们会create在控制器中找到一个方法,现在找到一个方法UsersController.然后我必须得到该方法的参数名称,然后我们可以得到它们的值:
val params = getParamsFromRequest()
val method = findMethodFromUrl("/users/create")
val paramNames = getParamNamesOfMethod(method)
val paramValues = getValues(params, paramNames)
// then invoke
method.invoke(controller, paramValues)
Run Code Online (Sandbox Code Playgroud)
现在,关键是如何获取方法的参数名称?