Java中的代码注入和子类之间有什么区别

时间:2017-04-06 05:59:48

标签: code-injection subclassing javassist

我正在阅读有关运行时代码注入的内容,并且有许多工具/ API可用,如Javassist,GluonJ和AspectJ,它们提供了注入代码的功能。但是,我不了解在运行时注入代码的目的,而我们可以通过Java中的子类来覆盖行为。使用Javassist和GluonJ,我可以在运行时创建类,但为什么有人这样做呢?任何人都可以帮助我理解代码注入的差异和目的吗?

1 个答案:

答案 0 :(得分:0)

代码注入通常用于application that are used to modify/check/trace other software.在Java中,我们通常会将此类库作为Bytecode modification libraries,因此如果您在互联网上查看,您可能会在此名称下找到更多信息。

在这里,我列出了几个大型和着名项目的例子,我现在正在使用字节码修改它们的核心:

  1. Evosuite:此项目在输入中接受应用程序并为其生成单元测试。代码注入用于探索所需的项目以及依赖性和可跟踪性
  2. JaCoCO:这个项目是Java项目的工具。它应该附加到您的应用程序上,一旦您运行JUnit测试,它将生成一个关于所实现的覆盖范围的报告。显然,这里需要代码注入来跟踪在测试执行期间进行的每个方法调用。