Чтение файла Java .class - PullRequest
4 голосов
/ 26 января 2011

Я хочу написать инструмент, который генерирует некоторый код, используя скомпилированный файл .class в качестве входных данных. В частности, я хочу прочитать из этого файла класса:

  • Методы с аннотациями
  • Параметры метода с аннотациями

Входной файл класса, вероятно, будет ссылаться на несколько типов, которых нет в пути к классам инструмента. Это нормально, мне не нужно ничего с ними делать, просто нужно читать полные имена типов в виде строк. Мне нужно получить некоторую информацию из аннотаций, но они будут в пути к классу инструмента.

Есть ли библиотека, которую я могу использовать для этой цели? Было бы неплохо, если бы API был немного похож на API отражения, но это не обязательно.

Ответы [ 6 ]

5 голосов
/ 26 января 2011

ASM http://asm.ow2.org/ позволяет читать класс из потока файлов / ввода без загрузки класса. Это позволяет вам видеть аннотации, которые не загружаются во время выполнения. Его также можно использовать для изменения байтового кода / аннотаций / метода класса и т. Д.

4 голосов
/ 26 января 2011

javap tool , включенный в JDK, вероятно, уже делает то, что вам нужно.

2 голосов
/ 26 января 2011

Вам нужно взглянуть на две вещи Reflection API и Decompiler

1 голос
/ 26 января 2011

Я использую asm для выяснения всех методов.

1 голос
/ 26 января 2011

Я думаю, вы могли бы использовать сканирование весеннего класса.

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());
}

для получения дополнительной информации вы можете посмотреть на весну документы

0 голосов
/ 26 января 2011

Если у вас есть доступ к созданию файла .class, тогда Reflection API должен помочь.

...