Чтение файла Java .class
-
24-10-2019 - |
Вопрос
Я хочу написать инструмент, который генерирует некоторый код, используя скомпилированный .class
Файл как вход. В частности, я хочу прочитать из этого файла класса:
- Методы с аннотациями
- Параметры метода, с аннотациями
Файл входного класса, вероятно, будет относиться к нескольким типам, которые не находятся в группе класса инструмента. Это нормально, мне не нужно ничего делать с ними, просто нужно читать полностью квалифицированные имена типов как строки. Мне нужно получить некоторую информацию от аннотаций, но они будут в группе класса инструмента.
Есть ли библиотека, которую я могу использовать для этой цели? Было бы неплохо, если бы API был немного похож на API отражения, но это не должно быть.
Решение
КАК М http://asm.ow2.org/ Позволяет прочитать класс из потока файла/ввода без загрузки класса. Это позволяет вам видеть аннотации, которые не загружаются во время выполнения. Он также может быть использован для изменения кода/аннотаций/метода класса байта/метода и т. Д.
Другие советы
А Джавап инструмент Включен в JDK, вероятно, уже делает то, что вам нужно.
Тебе нужно посмотреть на две вещи Reflection API
а также Decompiler
Я думаю, что вы могли бы использовать сканирование весеннего класса.
ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(true);
String basePackage = "org/springframework/samples/petclinic";
Set<BeanDefinition> components = provider.findCandidateComponents(basePackage);
for (BeanDefinition component : components) {
System.out.printf("Component: %s\n", component.getBeanClassName());
}
Для получения дополнительной информации вы можете посмотреть на пружину док
я использую как м для выяснения всех методов.
Если у вас есть доступ к генерации файла .class, то Отражение API должен иметь возможность помочь.