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("无参数"); } } }
|