290 votes

Les annotations de Java lors de l’exécution de numérisation

Quelle est la meilleure façon de chercher sur l'ensemble du chemin de classe pour une classe annotée?

Je suis en train de faire une bibliothèque et je veux permettre aux utilisateurs d'annoter leurs classes, de sorte que lorsque l'application Web commence j'ai besoin de numériser l'ensemble du classpath pour certains d'annotation.

Connaissez-vous d'une bibliothèque ou d'une installation de Java pour ce faire?

Edit: je suis en train de réfléchir à quelque chose comme les nouvelles fonctionnalités de Java EE 5 Services Web ou des EJB. Vous annoter votre classe avec @WebService ou @EJB et le système de trouver ces classes pendant le chargement afin qu'ils soient accessibles à distance.

240voto

Arthur Ronald Points 19001

Utiliser org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider

API

Un fournisseur de composants qui scanne le classpath d’un package de base. Ensuite, il s’applique à exclure et incluent des filtres pour les classes résultantes pour trouver des candidats.

Cordialement,

157voto

Jonathan Points 1406

Et une autre solution est de Google réflexions:

http://code.google.com/p/reflections/

Examen rapide:

  • Solution de printemps est la voie à suivre si vous êtes à l'aide de Printemps. Sinon, c'est une grande dépendance.
  • À l'aide de l'ASM directement est un peu lourd.
  • À l'aide de Java Aider directement est maladroit trop.
  • Annovention est super léger et pratique. Pas de maven integration encore.
  • Google réflexions tire dans Google collections. Index tout et puis c'est super rapide.

28voto

rmuller Points 792

Si vous voulez une solution très rapide et vraiment léger (aucun fichier jar dépendances, simple API, 15 Ko), jetez un oeil à `` à https://github.com/rmuller/infomas-asl

AVERTISSEMENT : je suis l’auteur.

20voto

Sławek Points 539

Vous pouvez utiliser Java Pluggable Annotation de Traitement de l'API pour écrire processeur d'annotation qui sera exécuté pendant le processus de compilation et permettra de recueillir toutes les classes annotées et de construire le fichier d'index pour l'exécution de l'utiliser.

C'est le moyen le plus rapide possible de faire annoté de la classe de découverte, car vous n'avez pas besoin de scanner votre classpath lors de l'exécution, qui est généralement très lente de l'opération. En outre, cette approche fonctionne avec n'importe quel chargeur de classe, et pas seulement avec URLClassLoaders généralement pris en charge par l'exécution des scanners.

Le mécanisme décrit ci-dessus est déjà mis en œuvre dans ClassIndex de la bibliothèque.

Pour l'utiliser d'annoter vos annotations personnalisées avec @IndexAnnotated méta-annotation. Cela va créer au moment de la compilation, un fichier d'index: META-INF/annotations/com/test/YourCustomAnnotation liste de toutes les classes annotées. Vous pouvez l'accès à l'index au moment de l'exécution, par l'exécution de:

ClassIndex.getAnnotated(com.test.YourCustomAnnotation.class)

10voto

erickson Points 127945

Utiliser le ServiceLoader, ou implémenter votre propre si vous n’êtes pas en Java 6.

Peut-être un processeur annotation pourrait produire les fichiers nécessaires en vertu de la META-INF/services au moment de la compilation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X