【问题标题】:Retro-actively add Java annotations to methods?追溯主动向方法添加 Java 注释?
【发布时间】:2011-01-28 10:04:19
【问题描述】:

有没有办法修改 .class 文件以便为某些方法添加 Java 注释?基本上我想遍历jar文件中每个类文件的方法并注释某些。请注意,这不是在运行时使用 jar 文件。相反,在我完成后,我想修改带有注释的类文件。

我确实可以访问源代码,所以如果有一个自动源代码修改器,那也可以...

我假设我需要一个工具,例如 JavassistASM。如果是这样,我应该使用哪一个?我将如何去做?

【问题讨论】:

  • 当然可以通过向 .class 文件的方法字段添加适当的属性来做到这一点。不过,我没有太多使用工具来执行此操作的经验。
  • 我猜这令人鼓舞……希望有人能尽快回答。 :)

标签: java annotations bytecode-manipulation java-bytecode-asm


【解决方案1】:

其实这是 AspectJ 的一个经典用例:

declare @method : public * BankAccount+.*(..) : @Secured(role="supervisor")

虽然我承认直接字节码操作更强大,但 AspectJ 对用户更加友好,当你做错事时它会立即给你编译器警告。

另外,如果您使用Load Time Weaving,您可以保持原始库 jar 不变,因为编织发生在类加载时。

参考:

【讨论】:

    【解决方案2】:

    谷歌搜索一个小时左右将this article 向上翻,这似乎完全回答了我的问题:使用ASM。要使用更改后的字节码写入类文件,请使用ClassWriter

    嗯,我想是时候开始工作了。 :)

    【讨论】:

      猜你喜欢
      • 2011-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多