0Pricing
Java Academy · Ders

Derleme Zamanı Ek Açıklama İşleyicileri

Kaynak dosyaları oluşturmak veya kodu derleme zamanında doğrulamak için bir AbstractProcessor yazın.

Derleme Zamanı Ek Açıklama İşleyicileri, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 4. 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.

Anotasyon İşlemcileri Nedir?

Anotasyon işlemcileri (APT — Anotasyon İşleme Aracı) derleme sırasında çalışır. Kaynak kodundaki anotasyonları inceler ve yeni kaynak dosyaları veya kaynak dosyaları oluşturabilir ya da derleyici hataları ve uyarıları üretebilir.

AbstractProcessor: Temel Sınıf

javax.annotation.processing.AbstractProcessor sınıfını genişletin. Anotasyonlanmış öğeleri işlemek için process() yöntemini geçersiz kılın. Desteklenen anotasyonları ve Java kaynak sürümünü bildirin.

import javax.annotation.processing.*;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.*;

@SupportedAnnotationTypes("com.example.GenerateBuilder")
@SupportedSourceVersion(SourceVersion.RELEASE_17)
public class BuilderProcessor extends AbstractProcessor {
    @Override
    public boolean process(Set<? extends TypeElement> annotations,
                           RoundEnvironment roundEnv) {
        for (Element e : roundEnv.getElementsAnnotatedWith(GenerateBuilder.class)) {
            generateBuilder((TypeElement) e);
        }
        return true;
    }
    private void generateBuilder(TypeElement cls) { /* generate source */ }
}

İşlemciyi Kaydetme

İşlemciyi META-INF/services/javax.annotation.processing.Processor içine tam nitelikli sınıf adıyla kaydedin. Derleme araçları (Maven, Gradle) işlemciyi otomatik olarak bulur.

# META-INF/services/javax.annotation.processing.Processor
com.example.BuilderProcessor

Kaynak Dosyaları Oluşturma

Yeni bir .java dosyası yazmak için processingEnv.getFiler().createSourceFile() kullanın. Derleyici, oluşturulan dosyayı aynı turda veya sonraki turda derler.

JavaFileObject file = processingEnv.getFiler()
    .createSourceFile("com.example.UserBuilder");
try (Writer w = file.openWriter()) {
    w.write("package com.example;\n");
    w.write("public class UserBuilder {\n");
    w.write("  // generated builder\n");
    w.write("}\n");
}

Öğe Modelini İnceleme

Anotasyon işlemcileri Element öğeleriyle çalışır (Class sınıflarıyla değil; kaynak henüz derlenmemiştir). TypeElement, VariableElement ve ExecutableElement kullanın.

TypeElement classElement = (TypeElement) element;
String className = classElement.getSimpleName().toString();
List<VariableElement> fields = classElement.getEnclosedElements().stream()
    .filter(e -> e.getKind() == ElementKind.FIELD)
    .map(e -> (VariableElement) e)
    .collect(Collectors.toList());

Derleyici Hataları Üretme

Hatalar, uyarılar veya notlar üretmek için processingEnv.getMessager().printMessage() çağrısını yapın. Özel kısıtlama anotasyonları, ihlalleri derleme zamanında bu şekilde bildirir.

processingEnv.getMessager().printMessage(
    Diagnostic.Kind.ERROR,
    "@GenerateBuilder requires at least one field",
    element
);

Çok Turlu İşleme

Anotasyon işleme turlar hâlinde gerçekleşir. Anotasyonlar içeren bir dosya oluşturursanız işlemci sonraki turda yeniden çalışabilir. roundEnv.processingOver() son turu bildirir.

if (roundEnv.processingOver()) {
    // last round — write summary files or do cleanup
}

Lombok'un İç İşleyişi

Lombok, mevcut sınıfların AST'sini değiştiren standart dışı bir APT uzantısı kullanır (belirtime göre buna izin verilmez). @Data, @Builder ve @Getter gibi anotasyonları, yöntemleri doğrudan derlenmiş sınıfa üretir.

MapStruct Kod Üretimi

MapStruct, derleme zamanında tür güvenli eşleyici uygulamaları üretir. @Mapper ile anotasyonlanmış arayüzleri okur ve uygulamaları normal Java sınıfları olarak yazar; çalışma zamanında hiç yansıtma kullanılmaz.

@Mapper
public interface UserMapper {
    UserDto toDto(User user);
    User toEntity(UserDto dto);
}
// MapStruct generates: UserMapperImpl.java at compile time

Anotasyon İşlemcilerini Test Etme

İşlemcileri birim testlerine tabi tutmak için google/compile-testing veya Kotlin için Kapt kullanın. Kaynak dizeleri sağlayın ve oluşturulan dosyaları veya derleyici hatalarını doğrulayın.

JavaFileObject src = JavaFileObjects.forSourceString("Test",
    "@GenerateBuilder public class Test { private String name; }");
Compilation c = Compiler.javac().withProcessors(new BuilderProcessor()).compile(src);
CompilationSubject.assertThat(c).succeeded();
CompilationSubject.assertThat(c).generatedSourceFile("TestBuilder");

İşlemci Paketleme

İşlemciyi ayrı bir Maven modülünde paketleyin. Anotasyon modülü (yalnızca anotasyonlar) bir compile bağımlılığıdır; işlemci modülü ise annotationProcessor kapsamındadır ve hiçbir zaman çalışma zamanı bağımlılığı değildir.

// build.gradle:
dependencies {
    implementation "com.example:my-annotations:1.0"
    annotationProcessor "com.example:my-processor:1.0"
}

Kısa Kontrol

Otomatik keşif için bir anotasyon işlemcisini nereye kaydedersiniz?

Özet

AbstractProcessor sınıfını genişletin, META-INF/services içine kaydedin, Filer ile kaynak üretin ve Messager ile hatalar bildirin. İşlemcileri ayrı paketleyin. Birim testleri için compile-testing kullanın. Çalışma zamanındaki yansıtma ek yükünü ortadan kaldırır.

Sıkça Sorulan Sorular

“Derleme Zamanı Ek Açıklama İşleyicileri” dersi ücretsiz mi?

Evet — “Derleme Zamanı Ek Açıklama İşleyicileri” 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.

“Derleme Zamanı Ek Açıklama İşleyicileri” dersinde ne öğreneceğim?

Kaynak dosyaları oluşturmak veya kodu derleme zamanında doğrulamak için bir AbstractProcessor yazın. 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 4. dersidir.

“Derleme Zamanı Ek Açıklama İşleyicileri” 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

  1. Ek Açıklamaları Tanımlama: Öğeler ve Varsayılanlar
  2. Saklama İlkeleri ve Hedef Türleri
  3. Çalışma Zamanında Ek Açıklama İşleme
  4. Derleme Zamanı Ek Açıklama İşleyicileri
← Java Academy Sayfasına Dön