Spring 如何在没有调试信息的情况下获取参数名称

Mad*_*dai 5 reflection spring spring-mvc

@RequestMapping("/form")
public String form(Model model, Integer id)
Run Code Online (Sandbox Code Playgroud)

例如,spring 可以知道参数 id 的名称是 id 并在运行时将请求参数的值绑定到它

med*_*088 4

这是JDK 8中引入的javac功能。您需要包含-parametersjavac命令行选项才能激活它。然后您将能够获取如下所示的参数名称:

\n\n
String name = String.class.getMethod("substring", int.class).getParameters()[0].getName()\nSystem.out.println(name);\n
Run Code Online (Sandbox Code Playgroud)\n\n

来自 Spring 文档3.3 Java 8(以及 6 和 7)

\n\n
\n

您还可以使用 Java 8\xe2\x80\x99s 参数名称发现(基于\n -parameters 编译器标志)作为在启用调试信息的情况下编译代码的替代方法。

\n
\n\n

正如ParameterNameDiscoverer类的 javadoc 中所指定的:

\n\n
\n

参数名称发现并不总是可行,但可以尝试各种策略,例如查找可能在编译时发出的调试信息,以及查找可选地伴随 AspectJ 注释方法的 argname 注释值。

\n
\n\n

这是 Spring 项目Java 8 方法和构造函数参数名称发现中相关 JIRA 项目的链接

\n\n

JDK 增强提案JEP 118:在运行时访问参数名称

\n