Java字节码检测由ASPECTJ标识的方法

时间:2015-11-26 11:17:05

标签: java aspectj instrumentation

我有一个遗留的java代码,我目前无法修改/无法访问它的源代码。 我们发现所有具有@SomeAnnotation运行时注释的方法存在问题,我们想在这些方法中修复一些内容。

@SomeAnnotation
void someMethod(...) {
     ...

}

我知道我可以使用AOP(aspectJ)来捕获带有这些注释的所有函数并在之前/之后添加操作,以及用其他东西替换执行代码......但是我想做什么是在这个函数中添加一些东西,并保留其余的代码(扫描字节码并修改中间的函数......)

有可能吗?如果是这样 - 怎么样?

由于

1 个答案:

答案 0 :(得分:1)

你可以试试javassist - 它是一个用Java编辑字节码的类库;它使Java程序能够在运行时定义新类,并在JVM加载时修改类文件。

或者 HotSwap - 它允许更改方法主体,添加/重命名方法/字段

您也可能会发现this link有用。

(根据你需要做的事情(在开头添加一些代码,完成函数的其余部分,在最后添加一些代码,而不是在中间修改函数),你可能可以使用周围的建议,ProceedingJoinPoint invocation  作为参数,您可以执行代码,然后调用invocation.proceed()将调用委托给原始目标。)