Domanda

Voglio scrivere uno strumento che genera un codice utilizzando un file .class compilato come input. In particolare, voglio leggere da questo file di classe:

  • Metodi, con annotazioni
  • parametri di metodo, con annotazioni

Il file di classe di ingresso sarà probabilmente riferirsi a diversi tipi che non sono nel percorso di classe dello strumento. Questo è ok, non ho bisogno di fare qualcosa con loro, basta leggere i nomi di tipo completo come stringhe. Ho bisogno di ottenere alcune informazioni dalle annotazioni, ma saranno nel percorso di classe dello strumento.

C'è una biblioteca che posso usare per questo scopo? Sarebbe bello se l'API è stato un po 'come l'API di riflessione, ma non dovrebbe essere così.

È stato utile?

Soluzione

http://asm.ow2.org/ consente di leggere una classe da un file / flusso di input senza classe di carico esso. Esso permette di vedere le annotazioni che non vengono caricati in fase di esecuzione. Può anche essere utilizzato per modificare il / annotazioni / metodo di codice di classe di byte, ecc.

Altri suggerimenti

Il javap strumento incluso con JDK fa probabilmente già quello che stai dopo.

È necessario guardare due cose Reflection API e Decompiler

Penso che si potrebbe utilizzare la scansione molla classe.

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

Per ulteriori informazioni, si può guardare in primavera docs

asm per scoprire tutti i metodi.

Se si ha accesso a generare il file .class poi il Reflection API dovrebbe essere in grado di aiuto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top