是否可以在运行时扫描程序包层次结构以查找调用方法的位置?

时间:2019-03-18 14:02:28

标签: java reflection

我有一个实用程序方法,该方法从环境中读取一个值,如果未定义该属性,则返回默认值。

public String Env.getString(String name, String defaultValue);

我想按需扫描整个应用程序(REST微服务),以列出对该方法的所有调用。目的是能够生成正在使用的所有环境属性和当前值的转储。

如何使用反射(或其他方案)查找给定层次结构中的所有类以查找对Utility方法的调用?由于我也有getIntegergetBoolean等,一个更好的解决方案将找到所有类似Env.get...的方法

1 个答案:

答案 0 :(得分:3)

反射对您没有帮助:仅允许您查询类和方法签名的结构。它不能让您访问方法的 body ,因此您无法从反射中识别方法调用

一个解决方案:使用一个不错的IDE。 Eclipse或IntelliJ为您提供一键解决方案,以“发现用法”。

如果您希望通过命令行使用某些工具,则需要寻找可以访问实际字节码的工具。一种愚蠢的暴力破解方法可能是使用javap将所有类文件分解为文本,然后使用grep在该输出中进行搜索。更复杂的方法将使用ASM库之类的工具,有关用例,请参见here