Java字节码注入的替代方案

6

我正在启动一个项目,需要为覆盖率目的(变量定义使用等)对Java应用程序进行仪器化。 它必须向应用程序添加跟踪语句和一些逻辑,并可能删除语句。

我已经搜索了如何仪器化Java代码的方法,而我总是找到有关字节码仪器化的信息。

我的问题是:这是唯一仪器化Java应用程序的方法吗?还有其他方法可以做到这一点吗?与其他方法相比,字节码仪器化有什么优势?

我可能会使用字节码解决方案,但我想知道其他方法的问题(如果有的话),以便做出明确的决定。

谢谢!

3个回答

3
另一种接近更改字节码的方法是使用AOP(面向切面编程)。主要库是 AspectJ,它也大多定义了该领域。
第三个可能有趣的选项(因为您刚开始使用程序)是使用 Spring。这意味着您将不得不学习一些关于IOC(控制反转),但基本上意味着您不必自己创建对象,而是让Spring为您完成,它具有优点,因为当Spring负责创建时,它可以在创建过程中添加各种各样的东西,而无需您在AspectJ中真正声明所有这些内容。
就复杂性而言,我可能会评级如下:
- Spring(最简单) - AspectJ - 字节码注入(最难)
但在谈论功能(能力)时,情况恰好相反。例如,仅使用最后一个才能执行减去代码之类的操作(我认为)。

2

你一定要看看AspectJ

从你的描述中,你可以用它来实现你想要的功能。

自己进行字节码插装完全可行,但更为复杂。

我认为你应该先看看AsepctJ,最后再考虑自己进行字节码插装。


0

请查看我的使用程序转换引擎构建覆盖工具的论文。这种方法的优点是可以用于任意编程语言。此外,它以程序员所见的方式查看源代码,而不是作为编译后的字节码(随着泛型变得越来越复杂,并被磨成更细的字节码,通过检查字节码来理解源代码变得更加困难)。

值得注意的是,程序转换概括了面向方面的编程。


不错的论文和工具。该项目是基于新测试模型的学术工具。在我们的情境中,开发一个新模型会更好。但还是谢谢! - Rafael Regis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接