80
|
Matt McHenry · 技术社区 · 14 年前 |
1
92
在JSR-175(annotations)的早期公开草案中,讨论了编译器和运行时是否应该忽略未知的注释,以便在注释的使用和声明之间提供更松散的耦合。一个具体的例子是在EJB上使用应用服务器特定的注释来控制部署配置。如果相同的bean应该部署在不同的应用服务器上,那么如果运行时只是忽略未知的注释而不是引发NoClassDefFoundError,将会很方便。 即使措辞有点模糊,我也认为你看到的行为是 JLS 13.5.7 : "... 删除注释对Java编程语言中程序的二进制表示的正确链接没有影响,程序应该仍然链接并运行,这意味着当通过反射访问时,将忽略未知的注释。 Sun的jdk5的第一个版本没有正确地实现这一点,但是它在1.5.0\u06中得到了修复。你可以找到相关的bug 6322301 但是它没有指向任何规范,只是声称“根据JSR-175规范的领导,未知的注释必须被getAnnotations忽略”。 |
2
35
所以呢保留策略.RUNTIME确保注释被编译为二进制文件,但二进制文件中的注释在运行时不必可用 |
3
10
如果您实际有读取@A并对其执行某些操作的代码,那么该代码对类A有依赖关系,它将抛出ClassNotFoundException。 如果不是,也就是说,没有代码特别关心@A,那么@A其实并不重要,这是有争议的。 |