符号表和java中的反射

时间:2014-03-31 23:27:47

标签: java spring reflection

似乎java的reflaction需要将符号表编译到类文件中。但是对于性能考虑,在运行时我们通常将其删除。 (我不知道java,在c ++中,我们真的将其移出生产主管)。

我的问题是,如果我删除符号表,这是否意味着某些库,如spring将无法正常工作?

PS:

来自Berthold Daum的Java™开发人员专业Eclipse 3的

  

Classfiles和JDK合规性在合规性和& Classfiles页面你   可以指定哪些符号信息,例如变量名称和   行号,将包含在生成的类文件中。此信息是必需的   调试,因此您可能希望保持建议的设置不变。但是,对于一个经过良好测试的程序,从类文件中删除这些信息可能是有意义的;生成的文件是   没有符号表的情况要小得多。

1 个答案:

答案 0 :(得分:3)

一般来说,很难知道反射代码可能会使用和不使用。像Spring这样的框架可能会使用运行时可用的调试信息。

举个例子,拿Spring的@PreAuthorize和相关的注释。在documentation中,我们看到以下内容:

  

如果代码中包含编译的调试信息,则可以按名称访问任何方法参数作为表达式变量。

因此,您必须彻底测试在编译后删除调试信息的任何步骤,或者必须知道您的代码不包含上述模式。

但请注意,标准Java Reflection库不提供此反射。有关如何在Java中完成此操作的更多信息,请参阅this answer

相关问题