我需要以编程方式知道哪些类正在调用给定类的(例如X)getter和setter。这里的关键是“以编程方式”。
例如,如果类A使用X的setPropertyABC()而类B使用X的getPropertyABC(),则我想根据对X的调用来定义类之间的依赖关系-在这种情况下,类A的执行必须先于类B.
我需要以编程方式执行此操作(而不是通过IDE)。我想创建一个程序,该程序将查看类的已编译字节码或源代码,并弄清楚哪些类在给定类上使用哪些方法。为此目的使用的最佳Java库是什么?字节码工具更合适吗?我在想ANTLR是否可以完成这项工作,但我不确定。公共领域中是否有任何示例代码可以解决此问题?
最佳答案
也许您可以使用Aspects。您将拥有一个切入点,可以拦截该类的所有get*
和set*
方法。顾问可以使用Thread.currentThread().getStackTrace()
找出调用方法是什么,然后记录结果。这不完全是字节码分析技术,但可能更简单。
[edit]就计算两个类之间的某种时间依赖关系(其中一个依赖于其他人调用的setter)而言,您的顾问可以将有关每次调用的信息附加到某种插入顺序数据结构(LinkedHashMap) 。如果调用了getX
,则可以查看对setX
的调用。