39 votes

Quel est l'intérêt des annotations sur les packages?

Je comprends l'objectif de la classe d'annotations, grâce à où et Comment les Annotations de Java?. Quel est le but de package annotations, comme décrit dans ce blog, et §7.4.1.1 de la Java Language Specification?

Pourquoi voudriez-vous d'associer des métadonnées à un package? Quels sont les types de choses que vous pourriez le faire?

42voto

viaclectic Points 2193
  1. bnd outil (et maven-bundle-plugin) rend l'utilisation de l'emballage des annotations. Mettre @Version et @Exportation d'annotation dans package-info.java permet de générer OSGi métadonnées.
  2. javadoc utilise le package annotations.
  3. JAXB utilise le paquet au niveau des annotations, par exemple, pour spécifier le mappage d'un type Java, XML Schéma type de paquet entier. Package annotations sont également utilisés dans JBoss xml de la liaison.
  4. Struts 2 de la Convention de plugin utilise une annotation pour spécifier une valeur par défaut de l'intercepteur pour toutes les actions dans un package.
  5. Il y a un paquet de niveau Hibernate Annotations. Un exemple de ces annotations d'utilisation peuvent être trouvés ici.

7voto

Thilo Points 108673

Je suppose que @Deprecated aurait du sens. Et peut-être quelque chose comme @Generated si le paquet entier a été généré par un outil de source non Java. Ou @Internal si ce package ne fait pas partie d'une API publique.

Peut-être que les outils OSGi (où vous devez déclarer les versions de vos packages et les packages dont vous dépendez) pourraient également en faire usage.

Quelqu'un a-t-il vu ceux dans la nature?

4voto

Amir Moghimi Points 949

Deux raisons auxquelles je peux penser:

  • Annoter des packages spéciaux pour permettre à certains aspects (par exemple, d'utiliser AspectJ) de tisser leurs classes pour des fonctionnalités spécifiques.
  • Annoter certains packages qui doivent être lus par certains outils, par exemple pour la génération de sources, métadonnées ou autres types de ressources.

2voto

Joachim Sauer Points 133411

JAXB pour par exemple la plupart des annotations qui sont normalement utilisés sur un type tout aussi bien s'appliquer à un package. Le sens dans ce cas serait de spécifier la valeur par défaut pour toutes les classes de ce package.

Par exemple, si vous voulez toutes les propriétés de toutes les classes dans un package qui sont exposées via des accesseurs/mutateurs pour être mappées dans le XML, vous pouvez spécifier @XmlAccessorType(XMLAccessType.PROPERTY) sur chaque classe ou simplement l'indiquer sur le paquet.

1voto

Paŭlo Ebermann Points 35526

Ce n'est pas l'objet réel, mais je suis en les utilisant comme une solution de contournement pour éviter la recompilation de l'package-info.java les fichiers.

Le problème est qu' javac (et la tâche Ant <javac>) ne crée pas de fichier de classe pour le package-info.java si ce n'est que de la documentation (la raison de leur existence) et l' package bla; déclaration, et que la tâche ant recompile tous les fichiers pour lesquels il n'existe pas (ou plus) correspondante .class le fichier.

L'ajout d'un mannequin d'annotation là (comme SuppressWarnings) a eu pour effet qu'un package-info.class est produit et donc le fichier n'est pas recompilé jusqu'à ce que de nouveau changé.

(Ant 1.8.0 résolu ce problème en créant un vide package-info.class même si il n'y avait pas d'annotation, mais je suis en utilisant une ancienne ant ici).

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