Можно ли сканировать иерархию пакетов во время выполнения, чтобы найти, где вызывается метод? - PullRequest
0 голосов
/ 18 марта 2019

У меня есть служебный метод, который считывает значение из среды и возвращает значение по умолчанию, если свойство не определено.

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

Я хотел бы просканировать все приложение (микросервис REST) ​​натребовать, чтобы перечислить все вызовы этого метода.Цель состоит в том, чтобы иметь возможность генерировать дамп всех используемых свойств среды и текущих значений.

Как я могу использовать отражение (или некоторую другую схему) для поиска всех классов в данной иерархии для поиска вызововк служебному методу?Так как у меня также есть getInteger, getBoolean и т. Д., Еще лучшее решение - найти все методы, такие как Env.get...

1 Ответ

3 голосов
/ 18 марта 2019

Отражение вам не поможет: это позволяет вам запрашивать структуру классов и сигнатур методов.Он не дает вам доступа к телу методов, поэтому у вас нет возможности идентифицировать вызовов методов по отражению.

Одно решение: использовать достойную IDE.Eclipse или IntelliJ дают вам решений одним щелчком мыши , чтобы "найти применение" для методов.

Если вы хотите что-то, что работает из командной строки, вам нужны инструменты, которые дают вам доступ кфактический байт-код.Глупый грубый метод мог бы использовать javap для дизассемблирования всех файлов классов в текст, а затем grep для поиска в этом выводе.Более сложные подходы будут использовать такие инструменты, как библиотека ASM , см. здесь для вашего варианта использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...