ProgrammationDéveloppeur Backend

Expliquez comment la prise en charge des annotations est réalisée en Java et comment créer vos propres annotations personnalisées. Comment les utiliser correctement en pratique ?

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse.

Historique de la question :

Les annotations sont apparues dans Java 5 pour ajouter des métadonnées dans le bytecode sans modifier la logique du programme lui-même. Grâce aux annotations, il est facile de fournir des informations supplémentaires aux classes et méthodes pour les frameworks, les compilateurs ou les analyseurs.

Problème :

Des annotations mal conçues ou mal utilisées compliquent la maintenance du code. Parfois, les développeurs confondent la pertinence des annotations ou ne savent pas comment créer les leurs, et ignorent la possibilité de créer des annotations avec des paramètres.

Solution :

Création d'une annotation personnalisée :

import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MyTest { String value() default ""; }

Utilisation de l'annotation :

public class TestClass { @MyTest("Exemple") public void testMethod() {...} }

Caractéristiques clés :

  • Les annotations peuvent avoir des paramètres avec des valeurs par défaut
  • L'annotation doit être accompagnée des méta-annotations @Target et @Retention
  • L'utilisation de Runtime Retention permet d'utiliser l'annotation via la réflexion

Questions pièges.

Une annotation peut-elle hériter d'une autre annotation ?

Réponse : Non, les annotations en Java ne prennent pas en charge l'héritage entre elles.

Peut-on rendre le travail d'une annotation obligatoire dans toutes les classes dérivées ?

Réponse : Pas directement. Il faut vérifier la présence de l'annotation par réflexion, en mettant en œuvre un contrôle similaire manuellement.

Quelle est la différence entre @Retention(CLASS) et @Retention(RUNTIME) ?

Réponse :

  • @Retention(RUNTIME) : l'annotation est accessible lors de l'exécution via réflexion
  • @Retention(CLASS) : l'annotation est conservée dans le bytecode, mais n'est pas accessible via la réflexion (utilisée uniquement par le compilateur)

Erreurs typiques et anti-modèles

  • Ne pas spécifier @Target et @Retention pour ses propres annotations
  • Utiliser des annotations à des fins inappropriées (par exemple, les traiter avec les mauvais outils ou en dehors du cadre prévu)

Exemple de la vie réelle

Cas négatif

Dans le projet, il a été décidé de remplacer la configuration XML par des annotations, mais sans ajouter @Retention(RUNTIME)

Avantages :

  • Le code est devenu plus compact

Inconvénients :

  • Les annotations ne sont pas visibles à l'exécution, le framework ne peut pas les traiter

Cas positif

Nous avons configuré une annotation personnalisée @Audit sur les méthodes, contrôlant l'audit des opérations commerciales, avec réflexion sur l'appel réel de la logique sur le serveur.

Avantages :

  • Audit centralisé et transparent

Inconvénients :

  • Le traitement des annotations nécessite une légère surcharge à l'exécution et une gestion réfléchie des exceptions de boucle