Définition des annotations
Les annotations fournissent des métadonnées intégrées au code, utilisables par les compilateurs, outils de développement ou environnements d'exécution. En Java, elles sont préfixées par "@" et s'appliquent aux classes, méthodes ou variables.
Composition des annotations
Définition d'annotation
public @interface MetaInfo {
String description() default "valeur par défaut";
}
Méta-annotations
@Retention: Cycle de vie (SOURCE, CLASS, RUNTIME)@Target: Éléments cibles (TYPE, METHOD, FIELD)@Documented: Inclusion dans la Javadoc@Inherited: Héritage par les sous-classes
Utilisation pratique
Application d'annotation
@MetaInfo(description = "Exemple")
public void traitement() {
System.out.println("Méthode annotée");
}
Traitement via réflexion
Method m = Exemple.class.getMethod("traitement");
if (m.isAnnotationPresent(MetaInfo.class)) {
MetaInfo meta = m.getAnnotation(MetaInfo.class);
System.out.println("Description : " + meta.description());
}
Applications courantes
Injection de dépendances
@Composant
public class ServiceClient {
@Inject
private DepotDonnees depot;
}
Validation de données
public class Utilisateur {
@NonVide
private String identifiant;
@FormatCourriel
private String email;
}
Gestion d'événements JavaFX
@FXML
private void gestionClic(ActionEvent e) {
System.out.println("Action déclenchée");
}
Implémentations dans les frameworks
JavaFX avec FXML
<Button fx:id="btnValider" onAction="#gestionClic"/>
Spring Boot
@ApplicationSpringBoot
public class MainApp {
@Inject
private ServicePrincipal service;
}
Processeurs personnalisés
public class AnalyseurAnnotations {
public static void scanner(Class> classe) {
Arrays.stream(classe.getMethods())
.filter(m -> m.isAnnotationPresent(MetaInfo.class))
.forEach(m -> {
MetaInfo info = m.getAnnotation(MetaInfo.class);
System.out.println("Méthode " + m.getName() + " : " + info.description());
});
}
}
Avantgaes et limites
Bénéfices :
- Amélioration de la lisibilité
- Réduction des configurations externes
- Flexibilité d'exécution
Contraintes :
- Surcharge potentielle par réflexion
- Courbe d'apprentissgae initiale
- Complexité de débogage