追溯性地向方法添加Java注释?

发布于 2024-10-14 14:47:26 字数 331 浏览 1 评论 0原文

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

我确实可以访问源代码,所以如果有自动源代码修饰符,那也可以工作......

我假设我需要一个工具,例如 JavassistASM。如果是这样,我应该使用哪一个以及如何处理?

Is there a way to modify .class files in order to add Java annotations to certain methods? Basically I want to traverse methods of each class file in a jar file and annotate certain ones. Note that this is not at run-time while using the jar file. Rather, after I'm done I want to have modified class files with the annotations.

I do have access to the source code, so if there's an automatic source code modifier, that would work as well...

I'm assuming I'll need a tool such as Javassist or ASM. If so, which one should I use and how would I go about it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦醒时光 2024-10-21 14:47:26

实际上,这是 AspectJ 的一个经典用例:

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

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

另外,如果您使用加载时间编织,您可以将原始库 jar 未更改,因为编织发生在类加载时。

参考:

Actually, this is a classic use case for AspectJ:

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

While I will grant you that direct byte code manipulation is more powerful, AspectJ is much more user-friendly, and it immediately gives you compiler warnings when you are doing something wrong.

Also, if you use Load Time Weaving, you can leave the original library jar unchanged, because the weaving happens at class-load time.

Reference:

冷情 2024-10-21 14:47:26

谷歌搜索一个小时左右,找到了这篇文章,这似乎完全回答了我的问题:使用ASM。要使用更改后的字节码编写类文件,请使用 ClassWriter。

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

Googling for an hour or so turned this article up which seems to completely answer my question: use ASM. To write class files using the changed bytecode, use ClassWriter.

Well, time to get to work then, I guess. :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文