读取Java .class文件

时间:2011-01-26 13:01:04

标签: java code-generation bytecode decompiling .class-file

我想编写一个工具,使用编译的.class文件作为输入生成一些代码。具体来说,我想从这个类文件中读取:

  • 带注释的方法
  • 带注释的方法参数

输入类文件可能会引用不在工具类路径中的几种类型。这没关系,我不需要对它们做任何事情,只需要将完全限定的类型名称作为字符串读取。我确实需要从注释中获取一些信息,但它们将在工具的类路径中。

是否有可以用于此目的的图书馆?如果API有点像反射API那会很好,但它不一定是。

6 个答案:

答案 0 :(得分:5)

ASM http://asm.ow2.org/允许您从文件/输入流中读取类而无需加载类。它允许您查看未在运行时加载的注释。它还可以用于修改类字节代码/注释/方法等。

答案 1 :(得分:4)

JDK中包含的javap tool可能已经完成了你所追求的目标。

答案 2 :(得分:2)

您需要查看两件事Reflection APIDecompiler

答案 3 :(得分:1)

我认为你可以使用弹簧类扫描。

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

有关详细信息,请查看spring docs

答案 4 :(得分:1)

我正在使用asm查找所有方法。

答案 5 :(得分:0)

如果您有权生成.class文件,那么Reflection API应该可以提供帮助。