我需要以编程方式知道哪些类正在调用给定类的(例如X)getter和setter。这里的关键是“以编程方式”。
例如,如果类A使用X的setPropertyABC()而类B使用X的getPropertyABC(),则我想根据对X的调用来定义类之间的依赖关系-在这种情况下,类A的执行必须在类B之前
我需要以编程方式执行此操作(而不是通过IDE)。我想创建一个程序,该程序将查看类的已编译字节码或源代码,并弄清楚哪些类在给定类上使用哪些方法。为此目的使用的最佳Java库是什么?字节码工具更合适吗?我当时在想ANTLR是否可以完成这项工作,但我不确定。公共领域中是否有任何示例代码可以解决此问题?
答案 0 :(得分:1)
也许您可以使用Aspects。您将拥有一个切入点,可以拦截该类的所有get*
和set*
方法。顾问可以使用Thread.currentThread().getStackTrace()
找出调用方法是什么,然后记录调查结果。这不完全是字节码分析技术,但可能更简单。
[edit]就计算两个类之间的某种时间依赖关系(其中一个依赖于其他人调用的setter)而言,顾问可以将有关每次调用的信息附加到某种插入顺序数据结构中(LinkedHashMap)。如果调用了getX
,那么您将查看对setX
的调用。
答案 1 :(得分:0)
几年前,我使用名为Dependency Finder的工具进行了练习,以分析源代码级别的依赖关系。我在http://dev.saxonica.com/blog/mike/2009/09/analyzing-dependencies-in-a-class-library-a-use-case-for-xslt-streaming.html
上报告了该项目该工具输出有关模块之间依赖性的信息(以XML形式),并且可以根据报告的粒度进行配置。我对XML报告进行了相当多的分析(使用XSLT),以了解我需要的代码结构,在这种情况下,代码结构是整个OpenJDK库。
博客的重点是如何对一些非常大的XML文件进行分析,但我希望它能为您提供一些见识。
博客文章上的公众评论还指向其他一些依赖分析工具。
答案 2 :(得分:0)
考虑了所有替代方案之后,我决定使用ASM库进行字节码分析。它被证明是非常合适和有用的。谢谢大家的答复。