Java Academy · Les

Reflectie en configuratie

Dynamische functies verwerken

Les 3 van 413 stappen

Reflectie en configuratie is een gratis Java Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Java Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Java Academy bevat in totaal 4 lessen.

Reflectie en configuratie

De analyse van de gesloten wereld van native-image kan alleen code zien die statisch kan worden getraceerd. Dynamische functies — reflectie, proxy's, resources en serialisatie — verbergen hun doelen voor de analyser. In deze les leer je hoe je ze in een native binair bestand laat werken.

Het probleem met reflectie

Wanneer je een klasse op basis van een tekenreeks op naam opzoekt, kan de analyser niet weten welke klasse je bedoelt. Als die klasse verder niet bereikbaar is, wordt ze uit de image weggelaten en mislukt de opzoekactie tijdens runtime.

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());
    }
}

Bereikbaarheidsmetadata

De oplossing is bereikbaarheidsmetadata: JSON-bestanden die native-image vertellen welke klassen, methoden en velden dynamisch worden gebruikt. Het bouwproces behoudt ze vervolgens en legt hun leden vast.

reflect-config.json

Een reflectie-item vermeldt de klasse en welke leden behouden moeten blijven. Dit fragment is JSON, geen Java — het staat onder META-INF/native-image/.

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

De trace-agent

Metadata handmatig schrijven is omslachtig. Voer je toepassing uit op de JVM met de trace-agent (-agentlib:native-image-agent=config-output-dir=...). Deze legt elke dynamische toegang tijdens een echte uitvoering vast en genereert de configuratiebestanden automatisch.

Doorloop je codepaden

De agent legt alleen vast wat daadwerkelijk wordt uitgevoerd. Daarom moet je de toepassing door al haar functies laten gaan — voer je tests ermee uit. Elk reflectiepad dat je overslaat, ontbreekt in de metadata en veroorzaakt een fout in de native build.

Dynamische proxy's

Voor dynamische JDK-proxy's is een proxy-config.json nodig met de interfacesets waarvoor proxy's worden gemaakt. De analyser kan deze niet afleiden, omdat de lijst met interfaces tijdens runtime wordt samengesteld.

Resources

Bestanden die via getResourceAsStream worden geladen, worden niet automatisch ingebed. Een resource-config.json met globpatronen vertelt native-image welke resources in het uitvoerbare bestand moeten worden opgenomen.

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

Serialisatie en JNI

Ook Java-serialisatie en native aanroepen (JNI) zijn dynamisch. Elk ervan heeft een eigen configuratiebestand (serialization-config.json, jni-config.json). De trace-agent genereert deze bestanden ook wanneer die paden worden uitgevoerd.

Programmatische registratie

Auteurs van bibliotheken kunnen metadata programmatisch in code registreren met behulp van een Feature via de RuntimeReflection-API, die tijdens het bouwen wordt uitgevoerd. Zo wordt de juiste configuratie in de bibliotheek meegeleverd en hoeven gebruikers niets handmatig in te stellen.

Gedeelde repository voor metadata

GraalVM beheert een gedeelde repository voor bereikbaarheidsmetadata met vooraf gemaakte configuratie voor populaire bibliotheken. De native-bouwtools kunnen deze automatisch ophalen, zodat gangbare frameworks direct werken.

Korte controle

Test je begrip van dynamische functies in native image.

Samenvatting

Je hebt geleerd hoe je met dynamische functies omgaat:

  • Reflectie, proxy's, resources, serialisatie en JNI zijn onzichtbaar voor statische analyse.
  • JSON-bestanden met bereikbaarheidsmetadata maken deze functies bekend aan native-image.
  • De trace-agent genereert automatisch configuratie op basis van een echte JVM-uitvoering.
  • Doorloop alle codepaden (vooral tests), zodat niets wordt overgeslagen.
  • Gebruik de gedeelde repository voor metadata voor populaire bibliotheken.
Gratis beginnen

Leer Java met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
104
Lessen
374

Veelgestelde vragen

Is de les “Reflectie en configuratie” gratis?

Ja — de volledige tekst van “Reflectie en configuratie” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Java Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Java Academy bevat in totaal 4 lessen.

Wat leer ik in “Reflectie en configuratie”?

Dynamische functies verwerken Je oefent met Java Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Java Academy te beginnen?

Ervaring vooraf is niet nodig. Java Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “Reflectie en configuratie”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Java Academy?

Ja. Elke les over Java Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Wat is GraalVM
  2. Een native image bouwen
  3. Reflectie en configuratie
  4. Afwegingen van een native image
← Terug naar Java Academy