Çalışma Zamanında Ek Açıklama İşleme
Doğrulama, yönlendirme veya bağımlılık ekleme mantığı uygulamak için ek açıklamaları çalışma zamanında yansıtma kullanarak okuyun.
Çalışma Zamanında Ek Açıklama İşleme, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
Sınıf Düzeyindeki Anotasyonları Okuma
Bir sınıftaki anotasyonları Class.getAnnotation() (tek anotasyon) veya getAnnotations() (tümü) ile alın. Anotasyon yoksa null döndürülür.
@Service
@RequestMapping("/api")
public class UserController {}
RequestMapping rm = UserController.class.getAnnotation(RequestMapping.class);
if (rm != null) System.out.println(Arrays.toString(rm.value())); // ["/api"]Yöntem Anotasyonlarını Okuma
Yöntem anotasyonlarını method.getAnnotation() ile alın. Bir sınıftaki tüm yöntemleri taramak için getDeclaredMethods() üzerinde yineleme yapın.
for (Method m : UserController.class.getDeclaredMethods()) {
GetMapping gm = m.getAnnotation(GetMapping.class);
if (gm != null) System.out.println(m.getName() + " -> " + Arrays.toString(gm.value()));
}Alan Anotasyonlarını Okuma
Alan anotasyonları doğrulama ve ORM çatıları tarafından kullanılır. getDeclaredFields() üzerinde yineleme yapın ve ilgili her anotasyonu denetleyin.
for (Field f : User.class.getDeclaredFields()) {
Column col = f.getAnnotation(Column.class);
if (col != null) System.out.println(f.getName() + " -> column: " + col.name());
}Parametre Anotasyonlarını Okuma
Parametre anotasyonlarına method.getParameterAnnotations() ile erişilebilir. Bu, her parametre için bir satır ve her anotasyon için bir giriş içeren iki boyutlu bir dizidir.
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
Anotasyon değerini okumadan önce hızlı ve null güvenli bir denetim yapmak için isAnnotationPresent(AnnotationType.class) kullanın.
if (m.isAnnotationPresent(Transactional.class)) {
beginTransaction();
m.invoke(target, args);
commitTransaction();
}Basit Bir Bağımlılık Enjeksiyonu Kapsayıcısı Oluşturma
Bir paketi @Component ile anotasyonlanmış sınıflar için tarayın, bunları yansıtma yoluyla örneklendirin ve bir map içinde saklayın; bu, basitleştirilmiş bir Spring kapsayıcısıdır.
Map<Class<?>, Object> beans = new HashMap<>();
for (Class<?> cls : scanPackage("com.example")) {
if (cls.isAnnotationPresent(Component.class)) {
beans.put(cls, cls.getDeclaredConstructor().newInstance());
}
}@Inject ile Anotasyonlanmış Alanları Enjekte Etme
Bean'leri oluşturduktan sonra @Inject ile anotasyonlanmış alanları tarayın ve alan enjeksiyonunu taklit ederek yansıtma yoluyla değerlerini ayarlayın.
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()));
}
}
}Anotasyon Değerleriyle Çalışma Zamanı Doğrulaması
Kısıtlama anotasyonu değerlerini (örneğin @Range(min=1, max=100)) okuyun ve alan değerini çalışma zamanında bu değerlere göre doğrulayın.
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");
}
}Tekrarlanabilir Anotasyonları Okuma
@Repeatable anotasyonları için, kapsayıcı anotasyondaki tüm örnekleri şeffaf biçimde almak üzere getAnnotationsByType() kullanın.
Tag[] tags = MyClass.class.getAnnotationsByType(Tag.class);
for (Tag t : tags) System.out.println(t.value());ClassPath Kütüphaneleriyle Paket Tarama
Standart Java yansıtması bir paketteki tüm sınıfları listeleyemez. Sınıf yolu girdilerini taramak için Reflections, ClassGraph veya Spring'in ClassPathScanningCandidateComponentProvider gibi kütüphaneleri kullanın.
Reflections reflections = new Reflections("com.example.service");
Set<Class<?>> services = reflections.getTypesAnnotatedWith(Service.class);
services.forEach(System.out::println);Çalışma Zamanında Anotasyon İşleme: Özet
Çalışma zamanı anotasyon işlemesi bağımlılık enjeksiyonunu, doğrulamayı, yönlendirmeyi ve nesne-ilişkisel eşlemeyi destekler. Bu, başlatma sırasında yapılan bir iştir; anotasyonları başlangıçta bir kez işleyin, sonuçları önbelleğe alın ve istek başına yürütülen yollarda yansıtma kullanmaktan kaçının.
Kısa Kontrol
@Repeatable anotasyonunun tüm örneklerini hangi yöntem alır?
Özet
Tek anotasyonlar için getAnnotation/isAnnotationPresent kullanın. Yöntemleri ve alanları getDeclared* ile tarayın. Tekrarlanabilir anotasyonlar için getAnnotationsByType kullanın. Başlangıçta işleyin ve sonuçları önbelleğe alın.
Sıkça Sorulan Sorular
“Çalışma Zamanında Ek Açıklama İşleme” dersi ücretsiz mi?
Evet — “Çalışma Zamanında Ek Açıklama İşleme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“Çalışma Zamanında Ek Açıklama İşleme” dersinde ne öğreneceğim?
Doğrulama, yönlendirme veya bağımlılık ekleme mantığı uygulamak için ek açıklamaları çalışma zamanında yansıtma kullanarak okuyun. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Çalışma Zamanında Ek Açıklama İşleme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Ek Açıklamaları Tanımlama: Öğeler ve Varsayılanlar
- Saklama İlkeleri ve Hedef Türleri
- Çalışma Zamanında Ek Açıklama İşleme
- Derleme Zamanı Ek Açıklama İşleyicileri