0Pricing
Java Academy · Lektion

Annotationen zur Laufzeit verarbeiten

Lesen Sie Annotationen zur Laufzeit per Reflection aus, um Validierungs-, Routing- oder Injection-Logik umzusetzen.

Annotationen zur Laufzeit verarbeiten ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Java Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.

Annotationen auf Klassenebene lesen

Rufen Sie Annotationen einer Klasse mit Class.getAnnotation() (eine Annotation) oder getAnnotations() (alle Annotationen) ab. Wenn die Annotation nicht vorhanden ist, wird null zurückgegeben.

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

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

Methodenannotation lesen

Rufen Sie Methodenannotation mit method.getAnnotation() ab. Durchlaufen Sie getDeclaredMethods(), um alle Methoden einer Klasse zu untersuchen.

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

Feldannotation lesen

Feldannotation werden von Validierungs- und ORM-Frameworks verwendet. Durchlaufen Sie getDeclaredFields() und prüfen Sie jedes relevante Feld auf die jeweilige Annotation.

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

Parameterannotation lesen

Parameterannotation sind über method.getParameterAnnotations() verfügbar: ein zweidimensionales Array, mit einer Zeile pro Parameter und einem Eintrag pro Annotation.

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

Verwenden Sie isAnnotationPresent(AnnotationType.class) als schnelle, null-sichere Prüfung, bevor Sie den Wert der Annotation lesen.

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

Einen einfachen Dependency-Injection-Container erstellen

Durchsuchen Sie ein Package nach mit @Component annotierten Klassen, instanziieren Sie diese über Reflection und speichern Sie sie in einer Map – ein vereinfachter Spring-Container.

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

Mit @Inject annotierte Felder injizieren

Durchsuchen Sie nach dem Erstellen der Beans die mit @Inject annotierten Felder und setzen Sie sie über Reflection – als Nachbildung der Feldinjektion.

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()));
        }
    }
}

Laufzeitvalidierung mit Annotationwerten

Lesen Sie die Werte von Constraint-Annotationen (wie @Range(min=1, max=100)) und validieren Sie den Feldwert zur Laufzeit anhand dieser Werte.

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");
    }
}

Wiederholbare Annotationen lesen

Verwenden Sie bei @Repeatable-Annotationen getAnnotationsByType(), um alle Instanzen transparent aus der Container-Annotation abzurufen.

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

Ein Package mit Classpath-Bibliotheken durchsuchen

Die standardmäßige Java-Reflection kann nicht alle Klassen eines Packages auflisten. Verwenden Sie Bibliotheken wie Reflections, ClassGraph oder Spring's ClassPathScanningCandidateComponentProvider, um Classpath-Einträge zu durchsuchen.

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

Verarbeitung von Annotationen zur Laufzeit: Zusammenfassung

Die Verarbeitung von Annotationen zur Laufzeit ermöglicht Dependency Injection, Validierung, Routing und ORM. Sie sollte bei der Initialisierung erfolgen: Verarbeiten Sie Annotationen einmal beim Start, speichern Sie die Ergebnisse im Cache und vermeiden Sie Reflection in Request-Pfaden.

Kurzer Test

Welche Methode ruft alle Instanzen einer @Repeatable-Annotation ab?

Zusammenfassung

Verwenden Sie getAnnotation/isAnnotationPresent für einzelne Annotationen. Durchsuchen Sie Methoden und Felder mit getDeclared*. Verwenden Sie getAnnotationsByType für wiederholbare Annotationen. Verarbeiten Sie sie beim Start und speichern Sie die Ergebnisse im Cache.

Häufig gestellte Fragen

Ist die Lektion „Annotationen zur Laufzeit verarbeiten“ kostenlos?

Ja — der vollständige Text von „Annotationen zur Laufzeit verarbeiten“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Java Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Annotationen zur Laufzeit verarbeiten“?

Lesen Sie Annotationen zur Laufzeit per Reflection aus, um Validierungs-, Routing- oder Injection-Logik umzusetzen. Du übst Java Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Java Academy zu starten?

Keine Vorkenntnisse erforderlich. Java Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Annotationen zur Laufzeit verarbeiten“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Java Academy-Lektion Code schreiben und ausführen?

Ja. Jede Java Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Annotationen definieren: Elemente und Standardwerte
  2. Retention-Richtlinien und Zieltypen
  3. Annotationen zur Laufzeit verarbeiten
  4. Annotation-Processor zur Compile-Zeit
← Zurück zu Java Academy