Question

Je veux écrire un outil qui génère un code à l'aide d'un fichier compilé .class en entrée. Plus précisément, je veux lire à partir de ce fichier de classe:

  • Méthodes, avec annotations
  • Paramètres Méthode, avec annotations

Le fichier de classe d'entrée se référera probablement à plusieurs types qui ne sont pas dans le classpath de l'outil. Ceci est ok, je ne pas besoin de faire quoi que ce soit avec eux, il suffit de lire les noms de type qualifié sous forme de chaînes. Je besoin d'obtenir des informations des annotations, mais ils seront dans le classpath de l'outil.

Y at-il une bibliothèque que je peux utiliser à cette fin? Ce serait bien si l'API était un peu comme l'API de réflexion, mais il ne doit pas être.

Était-ce utile?

La solution

http://asm.ow2.org/ vous permet de lire une classe à partir d'un fichier / flux d'entrée sans charge de classe il. Il vous permet de voir les annotations qui ne sont pas chargés lors de l'exécution. Il peut également être utilisé pour modifier le code d'octet de classe / annotations / méthode etc.

Autres conseils

L'outil javap inclus le fait probablement déjà JDK ce que vous êtes après.

Vous devez regarder deux choses Reflection API et Decompiler

Je pense que vous pouvez utiliser l'analyse de classe de printemps.

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

Pour plus d'informations, vous pouvez regarder le printemps docs

J'utilise asm pour trouver toutes les méthodes.

Si vous avez accès à générer le fichier .class alors le API de réflexion devrait être en mesure d'aide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top