Pregunta

Quiero escribir una herramienta que genera algún código utilizando un compilado .class archivo como entrada. Específicamente, quiero leer de este archivo de clase:

  • Métodos, con anotaciones
  • Parámetros del método, con anotaciones

El archivo de clase de entrada probablemente se referirá a varios tipos que no están en el classpath de la herramienta. Esto está bien, no necesito hacer nada con ellos, solo necesito leer nombres de tipos completamente calificados como cadenas. Necesito obtener información de las anotaciones, pero estarán en el classpath de la herramienta.

¿Hay una biblioteca que pueda usar para este propósito? Sería bueno si la API fuera un poco como la API de reflexión, pero no tiene que ser así.

¿Fue útil?

Solución

ASM http://asm.ow2.org/ Le permite leer una clase desde un archivo de archivo/transmisión sin cargarlo de clase. Le permite ver anotaciones que no están cargadas en tiempo de ejecución. También se puede usar para modificar el código de byte de clase/anotaciones/método, etc.

Otros consejos

los herramienta Javap Incluido con el JDK probablemente ya haga lo que buscas.

Necesitas mirar dos cosas Reflection API y Decompiler

Creo que podrías usar escaneo de clases de primavera.

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

Para obtener más información, puede investigar la primavera documentos

Estoy usando ASM para descubrir todos los métodos.

Si tiene acceso a generar el archivo .class, entonces el API de reflexión debería poder ayudar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top