我正在写我的硕士论文,其中涉及 .NET 中的 AOP 等,我提到在加载时不支持替换类是目前没有 .NET AOP 框架的一个重要因素。执行真正的动态编织——并非没有强加编织类必须在接口上扩展ContextBoundObject
或MarshalByRefObject
公开其所有语义的要求。
但是,您可以在 JVM 中使用 Java 执行此操作,这要归功于ClassFileTransformer
:
- 你扩展
ClassFileTransformer
. - 您订阅了类加载事件。
- 在类加载时,您重写类并替换它。
这一切都很好,但是我的项目主管在最后一刻要求我给他一份框架(和相关语言)的列表,这些框架(和相关语言)支持/不支持类替换。我现在真的没有时间去寻找这个:仅仅做一个肤浅的研究并可能在我的论文中加入错误的信息,我会感到不舒服。
所以我问你,哦,万能的编程社区,你能帮忙吗?当然,我不是要你自己研究这个。简单地说,如果您确定某个特定框架支持/不支持此功能,请将其作为答案。如果您不确定,请不要忘记指出。
非常感谢!
编辑:@ewernli
- 我在问(2)。
- 在 C# 中,您确实可以在运行时发出代码并动态创建新类,但它们是新类,它们不会替换现有类。我想做的是在加载时转换类,就像你可以在 Java 中使用
ClassFileTransformer
. - 关于修改方法的签名:是的,你是对的。我应该提到,就我而言,我不想修改类的接口,而是修改其方法的内容。
你的回答真的很有帮助。谢谢 :)