在运行时替换类中的方法调用

问题
我正在使用fitnesse来运行一些自动化测试。 有一个名为TableTable的类,如果增强它将允许我做一些很酷的事情。 我需要做的是改变这个类的appendInstructions()的方法。

因为fitnesse显式查找TableTable类,所以我不能简单地使用我所需的增强function创建TableTable的子类 – 我无法使fitnesse查找并使用我的自定义子类。

我目前的解决方案
我采用的临时解决方案是我借用了TableTable的源代码,将它添加到我的源代码树下,在fitnesse的jar下的相同包中,并更改了它的代码以满足我的需要。 我的代码的类文件出现在类路径中fitnesse的jar之前,因此我的更改被拾取。

我想做什么
我没有在fitnesse的jar中完全隐藏TableTable类,而是想在运行时只重写该类的一个方法。 是否有任何代码生成库(如cglib)帮助我在运行时重写类并帮助我实现这一目标?

根据您需要更改的范围,您可以使用Javassist来修改相关方法的主体 。 这里有一个关于使用Javassist拦截/替换方法的教程。

听起来你应该看看JRebel 。