Java SE5API的方法Instrumentation.redefineClasses(ClassDefinition[])规范告诉我们:
重新定义可以更改方法体、常量池和属性。重新定义不能添加、删除或重命名字段或方法,不得更改方法的签名或更改继承。
attributes是什么意思?我假设它可以是访问修饰符(私有、公共、.)、同步修饰符、最终修饰符和其他修饰符。但是,如果我试图不仅重新定义方法主体,而且重新定义它的访问修饰符,或者类的访问修饰符,或者尝试使方法同步,我就得到了
java.lang.UnsupportedOperationException: class redefinition failed: attempted to change method modifiers
at sun.instrument.InstrumentationImpl.redefineClasses0(Native Method)
at sun.instrument.InstrumentationImpl.redefineClasses(Unknown Source)那么,在这个上下文中,attributes是什么?
发布于 2012-10-17 02:28:17
J2SE5目前只支持对方法体和字段值的修改。如果修改访问修饰符,就意味着您完全改变了类的接口。
对于属性,它在Java编程中是一个非常模糊的概念,我不知道他们为什么把这个词放在文档中。当我们说属性时,在大多数情况下,我们是指Java命名API中的属性。
重新定义类提供了一种动态方法来更改现有系统的运行时行为。我认为AOP广泛使用。
发布于 2013-10-09 12:15:04
属性是添加到类文件中的类、方法和字段的附加信息的一部分。请参阅java规范http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.7。附录A.3 (http://download.forge.objectweb.org/asm/asm4-guide.pdf)中的ASM用户指南中也有对属性的简短描述。
https://stackoverflow.com/questions/12925919
复制相似问题