0Pricing
Java Academy · Leçon

Réflexion et configuration

Gérez les fonctionnalités dynamiques

Réflexion et configuration est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 4 leçons au total.

Réflexion et configuration

L'analyse en monde fermé de native-image ne peut voir que le code qu'elle peut suivre de manière statique. Les fonctionnalités dynamiques — réflexion, mandataires, ressources et sérialisation — dissimulent leurs cibles à l'analyseur. Cette leçon explique comment les faire fonctionner dans un binaire natif.

Le problème de la réflexion

Lorsque vous recherchez une classe à partir de son nom contenu dans une chaîne, l'analyseur ne peut pas savoir de quelle classe il s'agit. Si cette classe est par ailleurs inaccessible, elle sera exclue de l'image et la recherche échouera à l'exécution.

public class Main {
    public static void main(String[] args) throws Exception {
        String name = "java.util.ArrayList"; // could come from config
        Class<?> c = Class.forName(name);
        System.out.println("Loaded: " + c.getSimpleName());
    }
}

Métadonnées d'accessibilité

La solution consiste à utiliser des métadonnées d'accessibilité : des fichiers JSON qui indiquent à native-image quelles classes, méthodes et quels champs sont consultés dynamiquement. La construction les conserve alors et enregistre leurs membres.

reflect-config.json

Une entrée de réflexion indique le nom de la classe et les membres à conserver. Cet extrait est du JSON, pas du Java ; il se trouve sous META-INF/native-image/.

[
  {
    "name": "com.example.Person",
    "allDeclaredConstructors": true,
    "allDeclaredMethods": true,
    "fields": [ { "name": "age" } ]
  }
]

L'agent de traçage

Écrire les métadonnées à la main est fastidieux. Exécutez votre application sur la JVM avec l'agent de traçage (-agentlib:native-image-agent=config-output-dir=...). Il enregistre chaque accès dynamique au cours d'une exécution réelle et produit automatiquement les fichiers de configuration.

Exercer tous vos chemins de code

L'agent n'enregistre que ce qui s'exécute réellement ; vous devez donc faire passer l'application par toutes ses fonctionnalités — exécutez vos tests avec l'agent. Tout chemin réflexif oublié sera absent des métadonnées et provoquera un échec lors de la construction native.

Mandataires dynamiques

Les mandataires dynamiques du JDK nécessitent un proxy-config.json répertoriant les ensembles d'interfaces faisant l'objet d'un mandataire. L'analyseur ne peut pas les déduire, car la liste des interfaces est constituée à l'exécution.

Ressources

Les fichiers chargés via getResourceAsStream ne sont pas automatiquement intégrés. Un resource-config.json contenant des motifs glob indique à native-image quelles ressources intégrer à l'exécutable.

public class Main {
    public static void main(String[] args) {
        var url = Main.class.getResource("/banner.txt");
        System.out.println("Resource present: " + (url != null));
    }
}

Sérialisation et JNI

La sérialisation Java et les appels natifs (JNI) sont eux aussi dynamiques. Chacun possède son propre fichier de configuration (serialization-config.json, jni-config.json). L'agent de traçage les génère également lorsque ces chemins sont exécutés.

Enregistrement programmatique

Les auteurs de bibliothèques peuvent enregistrer les métadonnées dans le code à l'aide d'une Feature via l'API RuntimeReflection, exécutée lors de la construction. La configuration correcte est ainsi fournie à l'intérieur de la bibliothèque, sans configuration manuelle pour les utilisateurs.

Référentiel partagé de métadonnées

GraalVM gère un référentiel communautaire de métadonnées d'accessibilité contenant des configurations préconstruites pour les bibliothèques populaires. Les outils de construction native peuvent le récupérer automatiquement ; les frameworks courants fonctionnent donc immédiatement.

Vérification rapide

Vérifiez votre compréhension des fonctionnalités dynamiques dans une image native.

Récapitulatif

Vous avez appris à gérer les fonctionnalités dynamiques :

  • La réflexion, les mandataires, les ressources, la sérialisation et JNI sont invisibles pour l'analyse statique.
  • Les fichiers JSON de métadonnées d'accessibilité les déclarent à native-image.
  • L'agent de traçage génère automatiquement la configuration à partir d'une exécution réelle sur la JVM.
  • Exercez tous les chemins de code, en particulier les tests, afin que rien ne soit oublié.
  • Utilisez le référentiel partagé de métadonnées pour les bibliothèques populaires.

Questions Fréquemment Posées

La leçon « Réflexion et configuration » est-elle gratuite ?

Oui — le texte complet de « Réflexion et configuration » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Réflexion et configuration » ?

Gérez les fonctionnalités dynamiques Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Java Academy ?

Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Réflexion et configuration » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?

Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Qu’est-ce que GraalVM
  2. Construire une image native
  3. Réflexion et configuration
  4. Compromis des images natives
← Retour à Java Academy