Spring Api

1. LocalVariableTableParameterNameDiscoverer 获取参数列表

问题:Java.lang.reflect 包中提供了很多 API:获取所有的方法,获取所有的参数类型等,但是却没有一个 API 能够帮助我们获取某个方法的参数名列表(注意,Java 反射可以拿到类型,但是不能拿到具体的形参名称,而是以 arg0、arg1 返回的)。

解决办法:可以通过 ASM 提供的通过字节码获取方法的参数名称,Spring 给我们集成了这个东西,让我们使用起来非常的方便。

作用:这个东西有啥用,其实我们在 Action(controller) 层就会使用到,前端传递过来的参数是怎么反馈到具体的方法上的参数的值?它和 Httprequest.getParamer("xxx") 很类似。主要通过反射注入到具体的值中,但是怎么一一对应起来呢?这个就需要方法的参数名称啦,你懂了?通过名称看一下传递进来的参数是否含有具体的值,然后通过反射写入到具体的位置,这样我们在 Action 层的具体的方法中,可以获取到请求的值,而不用自己去手动的处理 Httprequest.getParamer("xxx"),这个也是框架给我们带来的便利性。

代码实践,主要的方法:LocalVariableTableParameterNameDiscoverer.getParameterNames(Method method);然后返回参数的 Stirng 数组,没有返回 NULL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.LocalVariableTableParameterNameDiscoverer;

import java.lang.reflect.Method;

@Slf4j
public class GetMethArguments {

private static final LocalVariableTableParameterNameDiscoverer parameterNameDiscoverer = new LocalVariableTableParameterNameDiscoverer();
public void testArguments(String test,Integer myInteger,boolean booleanTest){
}
public void test(){

}
public static void main(String[] args) {
Method[] methods = GetMethArguments.class.getMethods();
for(Method method:methods){
String[] paraNames = parameterNameDiscoverer.getParameterNames(method);

log.info("methodName:"+method.getName());
if(paraNames !=null){
StringBuffer buffer = new StringBuffer();
for(String string:paraNames){
buffer.append(string).append("\t");
}
log.info("parameArguments:"+buffer.toString());
}else{
log.info("无参数");
}
}
}

本站由 江湖浪子 使用 Stellar 1.28.1 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。