2009-10-06 8 views
2

Quelqu'un peut-il expliquer ce que signifient les deux paragraphes suivants, en anglais simple? (Tiré de http://www.ibm.com/developerworks/java/library/j-cwt08025.html)Explication sur les annotations

« Les annotations sont plus souples dans la façon dont vous les utilisez, avec des options pour que l'annotation informations doivent être inclus dans la production de fichiers classe par le compilateur et fait disponible à l'application à l'exécution heure "

Vous ne savez pas ce que cela signifie. Les annotations peuvent-elles être configurées pour éventuellement modifier le bytecode?

Bien que les annotations sont idéales pour les métadonnées qui se rapporte à un composant particulier, ils ne sont pas bien adaptés aux métadonnées avec application multi-composants .

À mon avis, la plupart des applications Web seraient des applications inter-composantes. Qu'est-ce que l'auteur essaie de dire ici?

Répondre

3

Les annotations sont plus souples en termes de la façon dont vous les utilisez, avec des options pour si les informations d'annotation est à inclure dans les fichiers de classe sortie par le compilateur et mis à la disposition l'application lors de l'exécution

, je pense, fait référence au fait que les annotations Java5 peuvent être déposés par le compilateur, alors que certains peuvent être conservés dans le bytecode. Ceci est contrôlé par l'annotation @Retention qui est placé sur votre type d'annotation, par exemple

@Documented 
@Retention(value=RUNTIME) 
public @interface Deprecated 

Cela indique que l'annotation @Deprecated sera présent dans le bytecode, et sera également visible à la réflexion. java.lang.annotation.RetentionPolicy définit les différentes options.

+0

Merci Skaffman, ça le clarifie bien. – dchucks

3

« Les annotations sont plus souples en termes de la façon dont vous les utilisez, avec des options pour que les informations d'annotation doit être inclus dans les fichiers de classe de sortie par le compilateur et mis à la disposition de l'application au moment de l'exécution »

il est plus souple que XDoclet parce que:

  • il peut être utilisé à partir du code source (comme XDoclet)
  • il peut être utilisé lors de l'exécution, quand vous avez seulement l'octet de code et non le code source (contrairement XDoclet)

Bien que les annotations sont idéales pour les métadonnées qui se rapporte à un composant particulier, ils ne sont pas bien adaptés aux métadonnées avec application de composants croisés.

Annotations (comme XDoclet) ont une caractéristique intéressante, par opposition à un Xml externe par exemple:
annotations en direct dans le code, il est donc naturel pour eux à appliquer au code qu'ils sont définis sur. Vous n'avez pas à spécifier (en utilisant une syntaxe complexe) à quel morceau de code ils s'appliquent.Exemples:

  • si une annotation est définie sur un procédé, on applique naturellement à cette méthode
  • si une annotation est définie sur un champ, il applique naturellement à ce champ
  • si une annotation est définie sur une classe, il applique naturellement à cette classe
  • si une annotation est définie sur un paquet, il applique naturellement à ce paquet

Si vous voulez avoir la même chose dans un fichier Xml externe, vous devez utiliser une syntaxe complexe pour identifier le morceau de code auquel vous faites référence. Cela les rend donc très faciles à appliquer.

En outre, dans le cas d'un refactoring de code (comme le renommage), les annotations continuent à fonctionner correctement, tandis qu'un xml externe doit être modifié pour pointer vers le nouveau nom de classe ou de méthode. Je ne crois pas que dans une application Web, la plupart des choses sont inter-composantes.

  • Si vous avez défini Persistance (à une base de données) d'une entité, comme ce qui est la table où cette classe doit être persisté, ce n'est pas quelque chose global à toutes les entités, il ne touche que l'entité actuelle.
  • même pour beaucoup d'autres exemples ...