spring-LocalVariableTableParameterNameDiscoverer
记录一下后期整理
注:此工具类是解析class文件从class文件获取,而不是通过元空间的class对象的method获取
/** * 在 jdk 8 以前java源码编译后通过反射是无法获得形参名的,在Java 8及之后,编译的时候可以通过-parameters 为反射生成元信息,可以获取到方法的参数名,但这个行为默认是关闭的, * 我们平常用Spring的时候也没有开启, 那在没有开启和jdk 8 以前那在Springmvc项目中是如何获得方法的形参的呢,这个形参可关系到根据参数名称依赖注入和Controller中参数绑定。 * 答案是 通过字节码技术,将该类的class文件读进来,通过class的存储信息来得到的 ,就是LocalVariableTableParameterNameDiscoverer的inspectClass方法得到形参名 */ private LocalVariableTableParameterNameDiscoverer localVariableTableParameterNameDiscoverer = new LocalVariableTableParameterNameDiscoverer(); /** * 预置方法参数为el 内置变量 * * @param invocation * @param ctx */ private void setCtxVariableByMethodParameter(MethodInvocation invocation, EvaluationContext ctx) { Method method = invocation.getMethod(); Parameter[] parameters = method.getParameters(); if (ArrayUtil.isEmpty(parameters)) { return; } // 内部有缓存 String[] names = localVariableTableParameterNameDiscoverer.getParameterNames(method); Object[] arguments = invocation.getArguments(); for (int i = 0; i < names.length; i++) { if (log.isDebugEnabled()) { log.debug("#111 ctx.setVariable name={},value={}", names[i], arguments[i]); } ctx.setVariable(names[i], arguments[i]); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
2019-04-09 mybatis源码阅读-执行器Executor(四)