Java ASM 如何获取字段值和方法返回值
@邸星星 你好,想跟你请教个问题:
在使用ASM的时候,我能获取字段的名称和方法名称,但是就是无法获取字段或方法的返回值。
代码如下:
TestBean
package test; public class TestBean { public int in = 9 ; public int getIn() { return in; } public void setIn(int in) { this.in = in; } }TestVisitor:
package test; import java.io.IOException; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.FieldVisitor; import org.objectweb.asm.Opcodes; public class TestVisitor extends ClassVisitor{ public TestVisitor(int asmVersion) { super(asmVersion); } public FieldVisitor visitField(int access, String name, String desc, String sig, Object value) { //如果字段加 final ,则可以有默认值value,否则为null System.out.println(access+"t"+name+"t"+desc+"t"+sig+"t"+value); return super.visitField(access, name, desc, sig, value); } public static void main(String[] args) throws IOException { TestBean t = new TestBean(); t.setIn(5); // String p = t.getClass().getName(); // ClassReader creader = new ClassReader(p); ClassReader creader = new ClassReader( ClassLoader.getSystemResourceAsStream( t.getClass().getName().replace(".", "/")+".class")); TestVisitor visitor = new TestVisitor(Opcodes.ASM5); creader.accept(visitor, 0); } }运行结果:
1 in I null null
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不好意思,刚看到。 asm是字节码工具,字节码中的内容能读到, 但是运行时的数据就读不到了。
从你的main方法中也能看出来, ClassReader 读取的不是new 过的t, 而是.class文件。