2017-04-08 68 views
1

我的问题是,是否有可能的属性,甚至方法注入到一个已经“classloaded”级。我已经注意到,在java中动态添加属性并不是很简单,每个人都说你应该使用Map(add property for a object dynamicly)。修改场 - java的

有没有更好的和更“干净”的方式在运行时改变类。我读了一些关于ASM的知识,但我不知道ASM使用的访问者模式是否是最佳的工作方式。

如果ASM是处理这个问题的最好的事情,有没有提供对ASM网站上的一个身边的任何文件(http://download.forge.objectweb.org/asm/asm4-guide.pdf

+0

这是什么用法呢? –

+0

我对Spring&Co留下了深刻的印象,我想为什么不尝试编写相同的代码,只是为了了解更多关于java.reflection和可能落在这样一个伟大框架后面的过程。 短:我想通过从ZeroTurnaround(谁使JRebel的)人谈话学到新的东西 –

+1

至于我记得添加字段和方法,以现有的类是真的很辛苦,需要像真正用新换的全班解决方法然后更新所有到班级的链接。试图在网上找到这个谈话,如果我这样做会更新。 –

回答

2

一旦类已经被JVM加载,这是不可能的修改它。

最好的办法是修改类,然后在不同的类加载器加载一个新的副本...。您将最终得到两个版本的类(使用不同的运行时类型!)。类的第一个版本的任何实例都不会有新的字段,方法等等。

我的建议......不这样做。想想另一种方法来实现你实际想要在这里做的事情。或者,如果动态地修改类对于您的应用程序来说很重要,请考虑使用更动态的语言。

+0

谢谢您的回答 –