Annotation de rétention
L'annotation Rétention indique à quelle étape ce type d'annotation sera conservé. Il existe trois valeurs :
1.RetentionPolicy.SOURCE - Ce type d'annotations n'est conservé qu'au niveau du code source et sera ignoré lors de la compilation.
2.RetentionPolicy.CLASS - Ce type d'annotations est conservé lors de la compilation et existe dans le fichier de classe, mais la JVM l'ignorera
3.RetentionPolicy.RUNTIME - Les annotations de ce type seront conservées par la JVM, afin qu'elles puissent être lues et utilisées par la JVM ou un autre code en utilisant le mécanisme de réflexion au moment de l'exécution.
L'exemple 5 illustre la déclaration de RetentionPolicy.RUNTIME :
Exemple 1 d'annotations Java :
Copiez le code comme suit :
@Rétention(RetentionPolicy.RUNTIME)
public @interface Test_Rétention {
Chaîne doTestRetention();
}
Dans cet exemple, l'annotation @Retention(RetentionPolicy.RUNTIME) indique que l'annotation Test_Retention sera conservée par la machine virtuelle afin qu'elle puisse être lue par réflexion au moment de l'exécution.
Annotations documentées
L'annotation Documented indique que cette annotation doit être enregistrée par l'outil javadoc. Par défaut, javadoc n'inclut pas d'annotations. Mais si @Documented est spécifié lors de la déclaration d'une annotation, elle sera traitée par des outils tels que javadoc, donc les informations de type d'annotation. sera également inclus dans la documentation générée. L'exemple 6 démontre davantage l'utilisation de @Documented :
Exemple 2 d'annotations Java :
Copiez le code comme suit :
@Documenté
public @interface Test_Documenté {
Chaîne doTestDocument();
}
Ensuite, modifiez la classe TestAnnotations comme suit :
Copiez le code comme suit :
classe publique TestAnnotations {
public static void main(String arg[]) {
new TestAnnotations().doSomeTestRetention();
new TestAnnotations().doSomeTestDocumented();
}
@Test_Retention (doTestRetention="Test de conservation des informations d'annotation")
public void doSomeTestRetention() {
System.out.printf("Tester le type d'annotation 'Rétention'");
}
@Test_Documented(doTestDocument="Bonjour document")
public void doSomeTestDocumented() {
System.out.printf("Type d'annotation de test 'Documenté'");
}
}
Désormais, si vous utilisez la commande javadoc pour générer le fichier TestAnnotations.html, vous verrez des résultats similaires à ceux de la figure 1.
Comme vous pouvez le voir sur la capture d'écran, il n'y a pas de méthode d'information de type annotation () de la méthode doSomeTestRetention() dans le document. Cependant, le document de la méthode doSomeTestDocumented() fournit les informations de description de l'annotation. La balise @Documented est ajoutée à l'annotation Test_Documented. L'annotation précédente Test_Retention ne spécifiait pas la balise @Documented.
Annotation héritée (il peut y avoir un problème avec ce paragraphe...)
Il s'agit d'un type d'annotation légèrement plus complexe. Il indique que la classe annotée héritera automatiquement. Plus précisément, si la balise @Inherited est utilisée lors de la définition de l'annotation, puis que l'annotation définie est utilisée pour annoter une autre classe parent, la classe parent. a une sous-classe, alors toutes les propriétés de la classe parent seront héritées dans sa sous-classe. Dans l'exemple 7, vous verrez les avantages de l'utilisation de la balise @Inherited.
Exemple 3 d'annotations Java
Tout d'abord, définissez votre annotation :
Copiez le code comme suit :
@Hérité
public @interface MonObjetParent {
boolean isInherited() par défaut true ;
String doSomething() par défaut "Faire quoi ?";
}
Ensuite, une classe est annotée avec des annotations :
Copiez le code comme suit :
@MonObjetParent
Classe publique MonEnfantObject {
}
Comme vous pouvez le voir, vous n'avez pas besoin de définir les méthodes d'interface dans la classe d'implémentation. En raison de la balise @Inherited, celles-ci sont automatiquement héritées. À quoi cela ressemblerait-il si vous utilisiez une ancienne méthode de définition de la classe d'implémentation ? un coup d'oeil ci-dessous Il s'agit d'une implémentation ancienne :
Copiez le code comme suit :
classe publique MyChildObject implémente MyParentObject {
public booléen isInherited() {
renvoie faux ;
}
chaîne publique faire quelque chose() {
retour "";
}
public booléen égal (Objet obj) {
renvoie faux ;
}
public int hashCode() {
renvoie 0 ;
}
chaîne publique versChaîne() {
retour "";
}
classe publique annotationType() {
renvoie null ;
}
}
Voyez-vous la différence ? Comme vous pouvez le constater, vous devez implémenter toutes les méthodes de l'interface parent. En plus des méthodes isInherited() et doSomething() de myParentObject, vous devez également implémenter les méthodes equals(), toString(. ) et la méthode hasCode(). Il existe également la méthode annotationType() de la classe java.lang.annotation.Annotation. Que vous souhaitiez ou non implémenter ces méthodes, vous devez les inclure dans l'objet hérité.
en conclusion
Cet article vous montre comment faciliter le développement en utilisant la fonctionnalité d'annotation du JDK5. Les annotations n'affectent pas directement la sémantique du programme. Les outils de développement et de déploiement peuvent lire ces annotations et les traiter d'une certaine manière, et en utilisant le programme contenant les annotations. peut remplacer les fichiers source Java supplémentaires, les documents XML ou d'autres artefacts anciens. L'utilisation d'annotations peut accomplir la même chose avec moins de code et offre une meilleure détection des erreurs au moment de la compilation. Le but des annotations est de passer moins de temps sur des détails difficiles et inutiles et de se concentrer davantage sur les règles de logique métier. Cet article est la première partie de la série d'annotations Java. Dans la deuxième partie, vous apprendrez à utiliser les annotations pour développer un langage simple. Application Web. Enfin, dans la troisième partie, vous verrez un exemple complexe comprenant plusieurs tables de base de données.