0Pricing
Java Academy · Pelajaran

Refleksi dan Konfigurasi

Tangani fitur dinamis.

Refleksi dan Konfigurasi adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.

Refleksi dan Konfigurasi

Analisis dunia tertutup native-image hanya dapat melihat kode yang dapat ditelusurinya secara statis. Fitur dinamis — refleksi, proksi, sumber daya, dan serialisasi — menyembunyikan targetnya dari penganalisis. Pelajaran ini menjelaskan cara membuatnya berfungsi dalam biner mandiri.

Masalah pada Refleksi

Ketika Anda mencari kelas berdasarkan nama dari sebuah string, penganalisis tidak dapat mengetahui kelas mana yang Anda maksud. Jika kelas tersebut tidak dapat dijangkau melalui cara lain, kelas itu akan dikeluarkan dari citra dan pencarian akan gagal saat program berjalan.

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 Keterjangkauan

Solusinya adalah metadata keterjangkauan: berkas JSON yang memberi tahu native-image kelas, metode, dan anggota data mana yang diakses secara dinamis. Proses pembuatan kemudian mempertahankannya dan mencatat anggotanya.

reflect-config.json

Entri refleksi mencantumkan nama kelas dan anggota mana yang harus dipertahankan. Cuplikan ini adalah JSON, bukan Java — cuplikan ini berada di bawah META-INF/native-image/.

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

Agen Pelacakan

Menulis metadata secara manual itu merepotkan. Jalankan aplikasi Anda pada JVM dengan agen pelacakan (-agentlib:native-image-agent=config-output-dir=...). Agen ini mencatat setiap akses dinamis selama eksekusi nyata dan menghasilkan berkas konfigurasi secara otomatis.

Latih Semua Jalur Kode Anda

Agen hanya mencatat hal yang benar-benar dijalankan, jadi Anda harus menjalankan aplikasi melalui semua fiturnya — jalankan pengujian Anda menggunakan agen tersebut. Jalur reflektif apa pun yang terlewat akan tidak ada dalam metadata dan menyebabkan kegagalan pada pembuatan biner mandiri.

Proksi Dinamis

Proksi dinamis JDK memerlukan proxy-config.json yang mencantumkan kumpulan antarmuka yang akan diproksikan. Penganalisis tidak dapat menyimpulkan kumpulan ini karena daftar antarmuka dirangkai saat program berjalan.

Sumber Daya

Berkas yang dimuat melalui getResourceAsStream tidak otomatis disematkan. resource-config.json dengan pola pencocokan memberi tahu native-image sumber daya mana yang harus disertakan ke dalam program biner.

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

Serialisasi dan JNI

Serialisasi Java dan panggilan native (JNI) juga bersifat dinamis. Masing-masing memiliki berkas konfigurasinya sendiri (serialization-config.json, jni-config.json). Agen pelacakan juga menghasilkan berkas-berkas ini ketika jalur terkait dijalankan.

Pendaftaran Secara Terprogram

Penulis pustaka dapat mendaftarkan metadata dalam kode menggunakan Feature melalui API RuntimeReflection, yang dijalankan pada waktu pembuatan. Dengan cara ini, konfigurasi yang benar disertakan di dalam pustaka sehingga pengguna tidak memerlukan penyiapan manual.

Repositori Metadata Bersama

GraalVM memelihara repositori komunitas metadata keterjangkauan yang berisi konfigurasi siap pakai untuk pustaka populer. Alat pembuatan biner mandiri dapat mengambilnya secara otomatis, sehingga kerangka kerja umum langsung dapat digunakan.

Pemeriksaan Singkat

Uji pemahaman Anda tentang fitur dinamis dalam citra mandiri.

Rangkuman

Anda telah mempelajari cara menangani fitur dinamis:

  • Refleksi, proksi, sumber daya, serialisasi, dan JNI tidak terlihat oleh analisis statis.
  • Berkas JSON metadata keterjangkauan mendeklarasikan fitur-fitur tersebut kepada native-image.
  • Agen pelacakan membuat konfigurasi secara otomatis dari eksekusi JVM nyata.
  • Jalankan semua jalur kode (terutama pengujian) agar tidak ada yang terlewat.
  • Gunakan repositori metadata bersama untuk pustaka populer.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Refleksi dan Konfigurasi” gratis?

Ya — teks lengkap “Refleksi dan Konfigurasi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Refleksi dan Konfigurasi”?

Tangani fitur dinamis. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Java Academy?

Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Refleksi dan Konfigurasi” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?

Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Apa Itu GraalVM
  2. Membangun Native Image
  3. Refleksi dan Konfigurasi
  4. Pertukaran dalam Native Image
← Kembali ke Java Academy