Reflection og konfiguration
Håndtér dynamiske funktioner
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.
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
- Hvad er GraalVM
- Byg et native image
- Reflection og konfiguration
- Afvejninger ved native image