Pemprosesan Anotasi Masa Jalan
Baca anotasi semasa masa jalan menggunakan refleksi untuk melaksanakan logik pengesahan, penghalaan atau suntikan.
Pemprosesan Anotasi Masa Jalan ialah pelajaran Java Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Java Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Membaca Anotasi Peringkat Class
Dapatkan anotasi pada sesuatu kelas menggunakan Class.getAnnotation() (satu) atau getAnnotations() (semua). Kaedah ini mengembalikan null jika anotasi tidak wujud.
@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 Kaedah
Dapatkan anotasi kaedah melalui method.getAnnotation(). Ulangi getDeclaredMethods() untuk mengimbas semua kaedah dalam sesuatu 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 Medan
Anotasi medan digunakan oleh rangka kerja pengesahan dan pemetaan objek-hubungan. Ulangi getDeclaredFields() dan semak setiap anotasi yang berkaitan.
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() — tatasusunan 2D, dengan satu baris bagi setiap parameter dan satu entri bagi 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. ValidisAnnotationPresent
Gunakan isAnnotationPresent(AnnotationType.class) sebagai semakan pantas yang selamat terhadap nilai null sebelum membaca nilai anotasi.
if (m.isAnnotationPresent(Transactional.class)) {
beginTransaction();
m.invoke(target, args);
commitTransaction();
}Membina Kontena Suntikan Kebergantungan Ringkas
Imbas pakej untuk mencari kelas yang dianotasi dengan @Component, hasilkannya melalui refleksi dan simpan dalam peta — iaitu kontena Spring yang dipermudah.
Map<Class<?>, Object> beans = new HashMap<>();
for (Class<?> cls : scanPackage("com.example")) {
if (cls.isAnnotationPresent(Component.class)) {
beans.put(cls, cls.getDeclaredConstructor().newInstance());
}
}Menyuntik Medan yang Dianotasi dengan @Inject
Selepas membina objek, imbas medan yang dianotasi dengan @Inject dan tetapkan nilainya menggunakan refleksi — meniru suntikan medan.
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()));
}
}
}Pengesahan Masa Jalan dengan Nilai Anotasi
Baca nilai anotasi kekangan seperti @Range(min=1, max=100) dan sahkan nilai medan terhadap kekangan tersebut pada masa jalan.
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 Berulang
Untuk anotasi @Repeatable, gunakan getAnnotationsByType() bagi mendapatkan semua tika daripada anotasi bekas secara telus.
Tag[] tags = MyClass.class.getAnnotationsByType(Tag.class);
for (Tag t : tags) System.out.println(t.value());Mengimbas Pakej dengan Pustaka ClassPath
Refleksi Java standard tidak boleh menyenaraikan semua kelas dalam sesuatu pakej. Gunakan pustaka seperti Reflections, ClassGraph atau ClassPathScanningCandidateComponentProvider milik Spring untuk mengimbas entri laluan kelas.
Reflections reflections = new Reflections("com.example.service");
Set<Class<?>> services = reflections.getTypesAnnotatedWith(Service.class);
services.forEach(System.out::println);Pemprosesan Anotasi pada Masa Jalan: Ringkasan
Pemprosesan anotasi pada masa jalan menyokong suntikan kebergantungan, pengesahan, penghalaan dan pemetaan objek-hubungan. Tugas ini dilakukan semasa pemulaan — proses anotasi sekali ketika permulaan, cache hasilnya dan elakkan refleksi dalam laluan bagi setiap permintaan.
Semakan Pantas
Kaedah manakah yang mendapatkan semua tika anotasi @Repeatable?
Ringkasan
Gunakan getAnnotation/isAnnotationPresent untuk anotasi tunggal. Imbas kaedah dan medan dengan getDeclared*. Gunakan getAnnotationsByType untuk anotasi berulang. Proses anotasi ketika permulaan dan cache hasilnya.
Pelajari Java dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 104
- Pelajaran
- 374
Soalan Lazim
Adakah pelajaran “Pemprosesan Anotasi Masa Jalan” percuma?
Ya — teks penuh “Pemprosesan Anotasi Masa Jalan” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Java Academy, tingkat taraf kepada CoddyKit PRO. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Pemprosesan Anotasi Masa Jalan”?
Baca anotasi semasa masa jalan menggunakan refleksi untuk melaksanakan logik pengesahan, penghalaan atau suntikan. Anda berlatih Java Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Java Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Java Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “Pemprosesan Anotasi Masa Jalan” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Mentakrifkan Anotasi: Elemen dan Lalai
- Dasar Pengekalan dan Jenis Sasaran
- Pemprosesan Anotasi Masa Jalan
- Pemproses Anotasi Masa Kompilasi