0Pricing
Java Academy · Pelajaran

Pemrosesan Anotasi saat Runtime

Baca anotasi saat runtime menggunakan reflection untuk menerapkan logika validasi, perutean, atau injeksi.

Pemrosesan Anotasi saat Runtime 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.

Membaca Anotasi Tingkat Kelas

Ambil anotasi pada sebuah kelas menggunakan Class.getAnnotation() (satu anotasi) atau getAnnotations() (semua anotasi). Metode ini mengembalikan null jika anotasi tidak ada.

@Service
@RequestMapping("/api")
public class UserController {}

RequestMapping rm = UserController.class.getAnnotation(RequestMapping.class);
if (rm != null) System.out.println(Arrays.toString(rm.value())); // ["/api"]

Membaca Anotasi Metode

Dapatkan anotasi metode melalui method.getAnnotation(). Lakukan iterasi pada getDeclaredMethods() untuk memindai semua metode dalam sebuah kelas.

for (Method m : UserController.class.getDeclaredMethods()) {
    GetMapping gm = m.getAnnotation(GetMapping.class);
    if (gm != null) System.out.println(m.getName() + " -> " + Arrays.toString(gm.value()));
}

Membaca Anotasi Anggota Data

Anotasi anggota data digunakan oleh kerangka kerja validasi dan ORM. Lakukan iterasi pada getDeclaredFields() dan periksa setiap anotasi yang relevan.

for (Field f : User.class.getDeclaredFields()) {
    Column col = f.getAnnotation(Column.class);
    if (col != null) System.out.println(f.getName() + " -> column: " + col.name());
}

Membaca Anotasi Parameter

Anotasi parameter tersedia melalui method.getParameterAnnotations()—sebuah array dua dimensi (satu baris untuk setiap parameter dan satu entri untuk setiap anotasi).

Method m = UserController.class.getDeclaredMethod("create", UserDto.class);
Annotation[][] pa = m.getParameterAnnotations();
for (Annotation a : pa[0]) System.out.println(a.annotationType().getSimpleName()); // e.g. Valid

isAnnotationPresent

Gunakan isAnnotationPresent(AnnotationType.class) sebagai pemeriksaan cepat yang aman terhadap nilai null sebelum membaca nilai anotasi.

if (m.isAnnotationPresent(Transactional.class)) {
    beginTransaction();
    m.invoke(target, args);
    commitTransaction();
}

Membangun Wadah Injeksi Dependensi Sederhana

Pindai sebuah paket untuk menemukan kelas yang diberi anotasi @Component, buat instansnya melalui refleksi, lalu simpan dalam sebuah pemetaan—sebuah wadah Spring sederhana.

Map<Class<?>, Object> beans = new HashMap<>();
for (Class<?> cls : scanPackage("com.example")) {
    if (cls.isAnnotationPresent(Component.class)) {
        beans.put(cls, cls.getDeclaredConstructor().newInstance());
    }
}

Menginjeksi Anggota Data yang Diberi Anotasi @Inject

Setelah membuat bean, pindai anggota data yang diberi anotasi @Inject dan atur nilainya menggunakan refleksi—meniru injeksi anggota data.

for (Object bean : beans.values()) {
    for (Field f : bean.getClass().getDeclaredFields()) {
        if (f.isAnnotationPresent(Inject.class)) {
            f.setAccessible(true);
            f.set(bean, beans.get(f.getType()));
        }
    }
}

Validasi Saat Waktu Proses dengan Nilai Anotasi

Baca nilai anotasi batasan (seperti @Range(min=1, max=100)), lalu validasikan nilai anggota data terhadap batasan tersebut saat waktu proses.

for (Field f : dto.getClass().getDeclaredFields()) {
    Range range = f.getAnnotation(Range.class);
    if (range != null) {
        f.setAccessible(true);
        int val = (int) f.get(dto);
        if (val < range.min() || val > range.max())
            throw new ValidationException(f.getName() + " out of range");
    }
}

Membaca Anotasi yang Dapat Diulang

Untuk anotasi @Repeatable, gunakan getAnnotationsByType() untuk mengambil semua instans dari anotasi wadah secara transparan.

Tag[] tags = MyClass.class.getAnnotationsByType(Tag.class);
for (Tag t : tags) System.out.println(t.value());

Memindai Paket dengan Pustaka ClassPath

Refleksi Java standar tidak dapat mencantumkan semua kelas dalam sebuah paket. Gunakan pustaka seperti Reflections, ClassGraph, atau ClassPathScanningCandidateComponentProvider milik Spring untuk memindai entri jalur kelas.

Reflections reflections = new Reflections("com.example.service");
Set<Class<?>> services = reflections.getTypesAnnotatedWith(Service.class);
services.forEach(System.out::println);

Pemrosesan Anotasi Saat Waktu Proses: Ringkasan

Pemrosesan anotasi saat waktu proses mendukung injeksi dependensi, validasi, perutean, dan ORM. Pemrosesan ini dilakukan saat inisialisasi—proses anotasi sekali saat awal aplikasi, simpan hasilnya dalam tembolok, dan hindari refleksi pada jalur per permintaan.

Pemeriksaan Singkat

Metode mana yang mengambil semua instans anotasi @Repeatable?

Rangkuman

Gunakan getAnnotation/isAnnotationPresent untuk anotasi tunggal. Pindai metode dan anggota data dengan getDeclared*. Gunakan getAnnotationsByType untuk anotasi yang dapat diulang. Lakukan pemrosesan saat awal aplikasi, lalu simpan hasilnya dalam tembolok.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pemrosesan Anotasi saat Runtime” gratis?

Ya — teks lengkap “Pemrosesan Anotasi saat Runtime” 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 “Pemrosesan Anotasi saat Runtime”?

Baca anotasi saat runtime menggunakan reflection untuk menerapkan logika validasi, perutean, atau injeksi. 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 “Pemrosesan Anotasi saat Runtime” 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. Mendefinisikan Anotasi: Elemen dan Nilai Bawaan
  2. Kebijakan Retensi dan Tipe Target
  3. Pemrosesan Anotasi saat Runtime
  4. Pemroses Anotasi saat Kompilasi
← Kembali ke Java Academy