Java Academy · Lektion

Reflection og konfiguration

Håndtér dynamiske funktioner

Lektion 3 af 413 trin

Reflection og konfiguration er en gratis Java Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Java Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Java Academy-kurset indeholder 4 lektioner i alt.

Refleksion og konfiguration

native-image's analyse med lukket verden kan kun se kode, som den kan følge statisk. Dynamiske funktioner — refleksion, proxyer, ressourcer og serialisering — skjuler deres mål for analysatoren. Denne lektion forklarer, hvordan du får dem til at fungere i en native-binærfil.

Problemet med refleksion

Når du slår en klasse op ud fra et navn i en streng, kan analysatoren ikke vide, hvilken klasse du mener. Hvis klassen ellers ikke kan nås, udelades den fra imaget, og opslaget mislykkes under kørsel.

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

Metadata for nåbarhed

Løsningen er metadata for nåbarhed: JSON-filer, der fortæller native-image, hvilke klasser, metoder og felter der tilgås dynamisk. Bygningen beholder dem og registrerer deres medlemmer.

reflect-config.json

En refleksionspost angiver klassen og de medlemmer, der skal bevares. Dette uddrag er JSON, ikke Java — det ligger under META-INF/native-image/.

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

Sporingsagenten

Det er besværligt at skrive metadata i hånden. Kør dit program på JVM'en med sporingsagenten (-agentlib:native-image-agent=config-output-dir=...). Den registrerer hver dynamisk adgang under en virkelig kørsel og genererer konfigurationsfilerne automatisk.

Afprøv dine kodeveje

Agenten registrerer kun det, der faktisk udføres, så du skal føre applikationen gennem alle dens funktioner — kør dine tests med den. Enhver refleksionssti, du overser, mangler i metadataene og får den native bygning til at fejle.

Dynamiske proxyer

JDK's dynamiske proxyer kræver en proxy-config.json, der viser de grænsefladesæt, som proxieres. Analysatoren kan ikke udlede disse, fordi grænsefladelisten sammensættes under kørsel.

Ressourcer

Filer, der indlæses via getResourceAsStream, indlejres ikke automatisk. En resource-config.json med glob-mønstre fortæller native-image, hvilke ressourcer der skal pakkes ind i den eksekverbare fil.

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

Serialisering og JNI

Java-serialisering og nativekald (JNI) er også dynamiske. Hver af dem har sin egen konfigurationsfil (serialization-config.json, jni-config.json). Sporingsagenten genererer også disse, når de pågældende kodeveje udføres.

Programmatisk registrering

Biblioteksforfattere kan registrere metadata i kode ved hjælp af en Feature via RuntimeReflection-API'et, som udføres ved byggetid. På den måde leveres korrekt konfiguration inde i biblioteket, så brugerne ikke behøver manuel opsætning.

Fælles metadataarkiv

GraalVM vedligeholder et communitybaseret metadataarkiv for nåbarhed med forudbyggede konfigurationer til populære biblioteker. De native-build-tools kan hente det automatisk, så almindelige frameworks fungerer uden ekstra opsætning.

Hurtig kontrol

Kontrollér din forståelse af dynamiske funktioner i Native Image.

Opsummering

Du har lært at håndtere dynamiske funktioner:

  • Refleksion, proxyer, ressourcer, serialisering og JNI er usynlige for statisk analyse.
  • Metadata for nåbarhed i JSON-filer erklærer disse over for native-image.
  • Sporingsagenten genererer automatisk konfiguration ud fra en virkelig JVM-kørsel.
  • Afprøv alle kodeveje (især tests), så intet overses.
  • Brug det fælles metadataarkiv til populære biblioteker.
Gratis at komme i gang

Lær Java med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
104
Lektioner
374

Ofte stillede spørgsmål

Er lektionen “Reflection og konfiguration” gratis?

Ja — hele teksten til “Reflection og konfiguration” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Java Academy-kurset, skal du opgradere til CoddyKit PRO. Java Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Reflection og konfiguration”?

Håndtér dynamiske funktioner Du øver dig i Java Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Java Academy?

Der kræves ingen tidligere erfaring. Java Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Reflection og konfiguration”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Java Academy-lektion?

Ja. Alle Java Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Hvad er GraalVM
  2. Byg et native image
  3. Reflection og konfiguration
  4. Afvejninger ved native image
← Tilbage til Java Academy