字节码如何通过接口类型检测java局部变量,然后找到调用它们的方法?
我有一些(可能)奇怪的要求——我想检测给定接口名称的局部(方法)变量的定义。当找到这样一个变量时,我想检测对这个变量调用哪些方法(set/get*)。 我很幸运地尝试了Javassist,现在我对ASM有了更深入的了解,但不确定它是否可能满足我的需求。 原因是我喜欢用依赖于相同数据结构的bean图生成依赖关系图。 如果这件事是可能的,有人能告诉我怎么做吗?也许还有其他框架可以做到这一点
2015年9月1日
为了让事情更清楚:
该界面是自行编写的——整个操作的目标是在第一步自动创建依赖关系图——之后,应基于依赖关系实现图形编辑器。 我想知道FindBugs/PMD是如何工作的,因为它们还使用字节码并检测空指针调用(变量未初始化,将对其调用方法)。所以我想我可以用同样的方式实现我的想法。整个代码都是基于Spring的——也许这为这一点提供了另一种解决方案?最后但并非最不重要的一点是,我可以在源jar上工作
在谈到这个问题时——是否可以通过ASM/javassist检测接口中所有可用的方法,并在其他类中找到对它们的调用
# 1 楼答案
我不确定我是否完全理解你想要什么,但是
可以在每个对象上使用implement, 有getter的evry对象可以使用名为getable的类来实现它。 然后,您可以只对具有从getable类实现的函数的对象执行操作
https://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html