2010-11-26 9 views
12

Je veux savoir pourquoi les annotations java sont tellement utilisées ... Je sais qu'elles ont remplacé la configuration xml dans jpa par exemple, mais pourquoi cette configuration est-elle utilisée? Considérez ce code: Pourquoi les annotations java?

@Entity 
class Ent{ 
    // some fields 
} 
//... somewhere in the other file far far away 
class NonEnt{ 
    // whatever here 
} 
Maintenant, quand j'essaye de mettre ceci dans le contexte de persistance, avec la méthode persist de EntityManager, j'obtiens l'erreur d'exécution (mieux serait d'obtenir l'erreur de compilation) en essayant de persister l'instance NonEnt. Il y a une solution évidente pour moi, forcer les entités à implémenter une interface sans méthode au lieu d'utiliser @Annotations. Mais ce n'est pas populaire parmi les concepteurs de cadre, quel est l'inconvénient de cette solution?
Merci d'avoir répondu ...

+0

C'est une question de conception pour les développeurs de cette bibliothèque. Vous avez raison de dire que les erreurs de compilation sont meilleures que les erreurs d'exécution. Peut-être que le compilateur Java devrait avoir un moyen de spécifier les annotations d'un argument? Jusqu'à ce qu'il le fasse, une interface de marqueur serait mieux. –

+1

Il y a trop de demandes pour fermer les questions de nos jours ... pourquoi les gens ne justifient-ils pas les raisons de fermer une question? –

+1

La rétrocompatibilité est la cause d'un si grand nombre de ces décisions de décision. Quand ils avaient seulement des fichiers XML, ils pouvaient vouloir ne pas avoir besoin de modifier les classes java. Cependant, maintenant ils ne peuvent pas mandater une interface sans casser les anciennes versions. Avec l'annotation, vous pouvez utiliser ce fichier OU un fichier XML. Pour avoir une interface, vous devez changer tout le code pour l'avoir, même les utilisateurs de XML. –

Répondre

8

Par rapport aux interfaces marqueurs, les annotations ont des avantages:

  • ils peuvent être paramétrés
  • ils sont plus à grains fins - vous pouvez les joindre non seulement aux classes, mais aussi à d'autres éléments de classe (champs, méthodes, arguments de méthode, etc.)

Les annotations sont également supposées moins intrusive e, mais ce point est une question de goût et discutable.

Voir aussi:

5

L'utilisation d'annotations est beaucoup moins invasive que de forcer le client à implémenter une interface ou à étendre une classe.

3

Il est la solution évidente pour moi,

Ce que vous décrivez est appelé "interface de marqueur" et c'est un abus de le concept d'interface. Je soupçonne que la seule raison pour laquelle vous le considérez comme évident est à cause de Serializable - qui n'existe que parce qu'il n'y avait pas d'annotations à ce moment-là.

vigueur les entités à mettre en œuvre une interface de sans méthode au lieu d'utiliser @Annotations. Mais ce n'est pas populaire parmi les concepteur de cadre, quel est l'inconvénient de cette solution?

Quels sont ses avantages? Les annotations ont l'énorme avantage de pouvoir avoir des paramètres, et elles sont beaucoup plus fines. Les interfaces de marqueur fonctionnent uniquement au niveau de la classe.

+2

avantage est l'erreur de compilation au lieu de l'exécution – coubeatczech

+0

@coubeatczech vrai, mais c'est un prix énorme pour un petit gain. Si vous voulez compiler des erreurs avec des annotations, utilisez AspectJ. Il vous permet de définir des erreurs de compilation personnalisées, en fonction de nombreux raccourcis différents, y compris les annotations (ou un manque de celles-ci) –

+1

vous pouvez également obtenir la même chose avec les processeurs d'annotation (apt) –

3

Citant le tutoriel java:

Annotations fournir des données sur un programme qui ne fait pas partie du programme lui-même. Ils n'ont aucun effet direct sur le fonctionnement du code qu'ils annotent.

Les annotations ont un certain nombre d'utilisations, parmi eux:

  • Information pour le compilateur - Les annotations peuvent être utilisés par le compilateur pour détecter les erreurs ou supprimer avertissements.
  • Traitement au moment du compilateur et au moment du déploiement - Les outils logiciels peuvent traiter des informations d'annotation vers générer du code, des fichiers XML, et ainsi .
  • Traitement à l'exécution - Certaines annotations sont disponibles pour être examinées lors de l'exécution. Comme vous pouvez le voir

, les annotations sont un moyen de spécifier des méta-données sur vos types en Java, y compris les interfaces, ils sont en aucun cas un remplacement pour eux.

0

Les annotations Java sont vraiment utiles lorsque vous souhaitez ajouter des informations supplémentaires à votre classe, méthode ou variable d'instance. Il y a beaucoup de bibliothèques qui utilisent fortement ces annotations. Ces annotations gardent le code simple et lisible avec la possibilité d'apporter des modifications au code lors de l'exécution. Par exemple si vous avez utilisé la bibliothèque lombok, qui crée setter, getter et le constructeur au moment de la compilation et vous enregistre des lignes de code et de temps. Lorsque le compilateur exécute le code, lomok recherche tous les champs marqués avec l'annotation @Setter ou @Getter et ajoute le setter et le getter pour ce champ dans la classe

Un autre exemple est Junit test runner. Comment junit différencie entre la méthode d'assistance normale dans la classe de test et un test. Pour différencier les deux, il utilise l'annotation @Test.

This tutorial explains how you can use java annotations to create you own test runner.