代码拉取完成,页面将自动刷新
同步操作将从 huifer/Code-Analysis 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
org.springframework.core.LocalVariableTableParameterNameDiscoverer
LocalVariableTableParameterNameDiscoverer
中的两个成员变量笔者对其的了解不是很深. 这里仅贴出代码.public class LocalVariableTableParameterNameDiscoverer implements ParameterNameDiscoverer {
// marker object for classes that do not have any debug info
private static final Map<Executable, String[]> NO_DEBUG_INFO_MAP = Collections.emptyMap();
// the cache uses a nested index (value is a map) to keep the top level cache relatively small in size
private final Map<Class<?>, Map<Executable, String[]>> parameterNamesCache = new ConcurrentHashMap<>(32);
}
在成员变量中出现了一个 Executable
在 JDK 中 Executable
下有两个实现类.
说到这里大概可以了解到 这里的 Executable -> String[] 的含义了. 即 可执行器 -> 参数列表
LocalVariableTableParameterNameDiscoverer
中 doGetParameterNames
就是主要的处理方法, 接下来对这个方法进行分析org.springframework.core.LocalVariableTableParameterNameDiscoverer.doGetParameterNames
@Nullable
private String[] doGetParameterNames(Executable executable) {
Class<?> declaringClass = executable.getDeclaringClass();
Map<Executable, String[]> map = this.parameterNamesCache.computeIfAbsent(declaringClass, this::inspectClass);
return (map != NO_DEBUG_INFO_MAP ? map.get(executable) : null);
}
在 doGetParameterNames
方法中还依赖inspectClass
方法.
方法签名: org.springframework.core.LocalVariableTableParameterNameDiscoverer.inspectClass
方法流程
InputStream is = clazz.getResourceAsStream(ClassUtils.getClassFileName(clazz));
// 类读取器
ClassReader classReader = new ClassReader(is);
Map<Executable, String[]> map = new ConcurrentHashMap<>(32);
classReader.accept(new ParameterNameDiscoveringVisitor(clazz, map), 0);
return map;
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。