是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对于"编译"自定义语言很有用。