java - 使用 ASM 时如何忽略检测 getter/setter?
问题描述
我正在使用 ASM 库来检测一些类。我创建自己的实例MethodVisitor
并覆盖它的一些方法,例如在方法开始visitCode()
时调用MethodVisitor
的方法。在这里,如果方法不是 getter/setter,我将插入我自己的代码。但是,如果访问者仅在方法的开头并且尚未访问该方法的其余部分,我怎么知道该方法是否不是 getter/setter?
我可以查看方法的名称,但这不是决定性的。为了测试一个方法是getter还是setter,我想检查该方法是否唯一做的事情是它在当前实例上使用GETFIELD或SETFIELD操作码,没有别的。
更新:visitField()
我发现工作的一种方法是在我的ClassVisitor
,而不仅仅是在上覆盖该方法visitMethod()
,因此我存储类的所有字段名称并检查方法是否具有名称getX()
或setX()
其中 X 是字段名称。这种方法会起作用,但它仍然是有限的,因为如果用户有这样一个命名的方法,但它不是一个 setter/getter。
解决方案
推荐阅读
- java - 为什么单行if上的对象赋值会抛出空指针异常
- ruby - Ruby:计算二叉树的所有节点值的总和
- node.js - 用 sequelize 构造查询的问题
- angular - 链接 observables 并将结果输入下一个
- bit-manipulation - >、>=、<、<= 如何仅使用按位运算实现
- apache - 如何将一个域重定向到另一个域,将非 www 重定向到 www,并使用 .htaccess 文件强制执行 SSL
- java - 遇到 Hibernate 继承问题:@SecondaryTable Annotations
- concurrency - 是否可以只允许一个线程改变共享数据?
- pandas - 循环插值的熊猫
- python - Python networkX MultiDiGraph 边数