是BCEL == Monkeypatching for Java吗?
时间:2020-03-05 18:47:15 来源:igfitidea点击:
一位同事前几天将我指向BCEL,从他的解释和快速阅读中,我可以最好地看出,这是一种在运行时修改字节码的方法。我的第一个念头是听起来很危险,第二个念头是听起来很酷。然后我再想一想,回想起有关猴子补丁的编码恐怖帖子,并意识到这基本上是同一回事。有没有人使用BCEL做任何实际的事情?我对,这基本上是运行时猴子修补程序,还是我错过了什么?
解决方案
回答
它比经典的猴子修补程序低一些,据我所读,已经加载到VM中的类不会更新。它仅支持再次将其保存到类文件,而不修改运行时类。
回答
从BCEL的常见问题解答中:
Q: Can I create or modify classes dynamically with BCEL? A: BCEL contains useful classes in the util package, namely ClassLoader and JavaWrapper.Take a look at the ProxyCreator example.
但是,monkeypatching确实是有争议的,如果语言不支持,我们可能不应该使用它。
如果我们有一个很好的用例,我是否建议嵌入Jython?
回答
我们可能将其视为猴子修补。我宁愿不使用它(也许我从未遇到过很好的用例?),而是熟悉它(了解Spring和Hibenrate如何使用它以及为什么使用它)。
回答
请参见以下示例:Jawk编译器模块。 BCEL对于"编译"自定义语言很有用。