0Pricing
Java Academy · Lección

Reflection y configuración

Gestione características dinámicas

Reflection y configuración es una lección gratuita de Java Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Java Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Java Academy incluye 4 lecciones en total.

Reflexión y configuración

El análisis de mundo cerrado de native-image solo puede ver el código que puede rastrear estáticamente. Las características dinámicas —reflexión, proxies, recursos y serialización— ocultan sus objetivos al analizador. En esta lección se explica cómo hacer que funcionen en un binario nativo.

El problema de la reflexión

Cuando busca una clase por su nombre a partir de una cadena, el analizador no puede saber a qué clase se refiere. Si esa clase no es alcanzable por ningún otro medio, se excluirá de la imagen y la búsqueda fallará en tiempo de ejecución.

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

Metadatos de alcanzabilidad

La solución son los metadatos de alcanzabilidad: archivos JSON que indican a native-image qué clases, métodos y campos se utilizan dinámicamente. La compilación los conserva y registra sus miembros.

reflect-config.json

Una entrada de reflexión indica el nombre de la clase y los miembros que se deben conservar. Este fragmento está escrito en JSON, no en Java; se encuentra en META-INF/native-image/.

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

El agente de trazado

Es tedioso escribir los metadatos manualmente. Ejecute su aplicación en la JVM con el agente de trazado (-agentlib:native-image-agent=config-output-dir=...). El agente registra cada acceso dinámico durante una ejecución real y genera automáticamente los archivos de configuración.

Pruebe todas las rutas de código

El agente solo registra lo que se ejecuta realmente, por lo que debe hacer pasar la aplicación por todas sus funcionalidades; ejecute las pruebas con él. Cualquier ruta reflexiva que omita estará ausente de los metadatos y fallará en la compilación nativa.

Proxies dinámicos

Los proxies dinámicos de JDK necesitan un proxy-config.json que enumere los conjuntos de interfaces a los que se aplican proxies. El analizador no puede inferirlos porque la lista de interfaces se construye en tiempo de ejecución.

Recursos

Los archivos cargados mediante getResourceAsStream no se incorporan automáticamente. Un resource-config.json con patrones glob indica a native-image qué recursos debe incluir en el ejecutable.

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

Serialización y JNI

La serialización de Java y las llamadas nativas (JNI) también son dinámicas. Cada una tiene su propio archivo de configuración (serialization-config.json, jni-config.json). El agente de trazado también genera estos archivos cuando se ejecutan esas rutas.

Registro mediante código

Los autores de bibliotecas pueden registrar metadatos en el código mediante un Feature a través de la API RuntimeReflection, que se ejecuta en tiempo de compilación. Así, la biblioteca incluye la configuración correcta en su interior y los usuarios no necesitan configurarla manualmente.

Repositorio compartido de metadatos

GraalVM mantiene un repositorio comunitario de metadatos de alcanzabilidad con configuraciones preconstruidas para bibliotecas populares. Las herramientas de compilación nativa pueden obtenerlo automáticamente, por lo que los frameworks habituales funcionan desde el primer momento.

Comprobación rápida

Compruebe su comprensión de las características dinámicas en una imagen nativa.

Resumen

Ha aprendido a gestionar las características dinámicas:

  • La reflexión, los proxies, los recursos, la serialización y JNI son invisibles para el análisis estático.
  • Los archivos JSON de metadatos de alcanzabilidad declaran estas características a native-image.
  • El agente de trazado genera automáticamente la configuración a partir de una ejecución real en la JVM.
  • Pruebe todas las rutas de código, especialmente las pruebas, para no omitir nada.
  • Use el repositorio compartido de metadatos para las bibliotecas populares.

Preguntas frecuentes

¿La lección «Reflection y configuración» es gratis?

Sí — el texto completo de «Reflection y configuración» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Java Academy, actualiza a CoddyKit PRO. El curso de Java Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Reflection y configuración»?

Gestione características dinámicas Practicas Java Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Java Academy?

No se requiere experiencia previa. Java Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Reflection y configuración»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Java Academy?

Sí. Cada lección de Java Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Qué es GraalVM
  2. Creación de una imagen nativa
  3. Reflection y configuración
  4. Compromisos de la imagen nativa
← Volver a Java Academy