【问题标题】:how to achieve bytecode instrumentation on the fly如何即时实现字节码检测
【发布时间】:2015-03-18 07:33:01
【问题描述】:

我们必须使用哪些可用技术来即时实施检测。到现在为止,我已经研究了一些用于字节码检测的 aspectj 和 javassits。

【问题讨论】:

  • 我已经投票结束这个问题,因为它太宽泛了(而且我不是唯一一个投票的人)。顺便说一句,Vimlesh,AspectJ 仪器也可以通过 LTW 运行。还有一个 API 可让您在运行时手动执行此操作,而无需编织代理。
  • 首先,您必须决定是想知道如何处理类的字节码(也称为字节码操作),还是想知道如何动态更新类(又名 Instrumentation),或者是否您正在搜索同时提供两者的图书馆。然后您可能会认为所有这些问题都是题外话,因为我们不是教程或图书馆搜索工具。
  • Holger,这里的“动态检测”是指在进程运行时更改已经检测的代码。例如,当系统即将启动时,您已经编织了 com.foo.bar..* 包,并且在运行时当进程从某个时间开始运行并且您想要为 com.foo.weaveme..* 添加挥动并禁用 com.foo 的编织。酒吧..*。编织应该在不重新启动进程的情况下发生。

标签: aspectj instrumentation java-bytecode-asm javassist bytecode-manipulation


【解决方案1】:

您可以使用我的库Byte Buddy,它允许您非常轻松地定义一个Java 代理,该代理与Java 的类加载过程挂钩。

通常,这取决于您需要做什么来决定哪种方法最适合。 Javassist 和 Byte Buddy 在运行时运行。 AspectJ 需要一个不同的编译器,许多人认为它很重。有关 Byte Buddy 的教程,请查看 the webpage

【讨论】:

    猜你喜欢
    • 2011-11-11
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    • 2018-12-29
    • 2023-03-23
    • 2020-07-18
    • 1970-01-01
    相关资源
    最近更新 更多