问题: 应用程序使用一些库。喜欢:
ClassA a=new ClassA();
在这个库中,classA使用classB - 例如从classB调用一些方法。 我需要改变这种方法的工作方式。 是否可以不使用AOP? 感谢。
答案 0 :(得分:2)
有两种选择:
a)修改来源
b)修改字节码
a)表示:下载源代码,更改源代码,构建和使用您自己的版本。缺点:对于库的每个新版本,您都需要创建一个新的修补版本
b)为此,AOP(可能使用AspectJ)是最简单的方法。其他选项是使用commons / bcel或cglib以编程方式执行此操作。 AOP更容易,因为您只需实现所需的行为,而使用字节码操作,您还必须进行大量的基础结构编程(例如,提供运行补丁的自定义ClassLoader或Java代理)。
备选方案c)通常是最好的:联系图书馆的开发人员并要求他提供您需要的功能。
答案 1 :(得分:1)
如果ClassA不是final,您可以继承ClassA。您应该下载库的源代码并查看内部以了解它是如何工作的 - 只创建一个子类作为最后的手段 - 您不想破坏库。