Große Sammlung Enterprise-Annotationen mit wichtigen Parametern

Stand: 2026-07-07 13:40 Projekt: Java_Enterprise_Wissenspaket_Aydin_Polat_GESAMT_PROMPTS_INDEX_OK Einträge: 530

Diese Fassung integriert die zuletzt ergänzten Annotationen fachlich in die passenden Kapitel. Es gibt keinen separaten Anhang mehr: CDI-, REST-, Validation-, Spring-, MicroProfile-, Jackson-, Lombok-, MapStruct- und Test-Annotationen stehen direkt dort, wo sie im Enterprise-Alltag gesucht werden.

Jeder Eintrag enthält deutsche Einordnung, englischen technischen Begriff, Package/Import, Priorität, wichtige Parameter, typischen Fehler, Ausgangspunkt-Code, Ziel-Code und eine kurze Enterprise-Einordnung.

Java Core und Meta-Annotationen12 Einträge

a001: Methode bewusst überschreiben

Englischer technischer Begriff
Method Override Contract
Annotation
@Override
Import/Package
java.lang
Priorität
9/10
Einsatzort
Methoden in Services, Adapter und DTO-Mapping
Wichtige Parameter
keine Parameter
Warum wichtig
Schützt vor stillen Tippfehlern bei Signaturen.
Typischer Fehler
Methode ähnelt nur der Superklassenmethode und wird nicht wirklich überschrieben.
Enterprise-Einordnung
Wichtig bei Refactoring von Legacy-Vererbung, Template Method und Framework-Hooks.
Ausgangspunkt-Code
public class OrderService {
    public String status() {
        return "active";
    }
}
Ziel-Code
public class BaseOrderService {
    public String status() { return "base"; }
}

public class OrderService extends BaseOrderService {
    @Override
    public String status() { return "active"; }
}

a002: Veraltete API kontrolliert markieren

Englischer technischer Begriff
API Deprecation Marker
Annotation
@Deprecated
Import/Package
java.lang
Priorität
8/10
Einsatzort
öffentliche APIs, SOAP-Adapter, Legacy-Fassaden
Wichtige Parameter
since; forRemoval
Warum wichtig
Macht Modernisierung planbar und sichtbar.
Typischer Fehler
Deprecated ohne Ersatzpfad oder ohne Versionsangabe.
Enterprise-Einordnung
Hilft bei Strangler-Migration und Kompatibilitätsfenstern.
Ausgangspunkt-Code
public class OrderService {
    public String status() {
        return "active";
    }
}
Ziel-Code
public class BaseOrderService {
    public String status() { return "base"; }
}

public class OrderService extends BaseOrderService {
    @Deprecated(since = "21", forRemoval = false)
    public String status() { return "active"; }
}

a003: Warnungen gezielt unterdrücken

Englischer technischer Begriff
Compiler Warning Suppression
Annotation
@SuppressWarnings
Import/Package
java.lang
Priorität
6/10
Einsatzort
eng begrenzte Legacy-Brücken
Wichtige Parameter
value
Warum wichtig
Unterdrückt nur bekannte, geprüfte Warnungen.
Typischer Fehler
Klassenweit unchecked/rawtypes unterdrücken und echte Fehler verstecken.
Enterprise-Einordnung
Nützlich bei generischen Alt-APIs, aber immer lokal begrenzen.
Ausgangspunkt-Code
public class OrderService {
    public String status() {
        return "active";
    }
}
Ziel-Code
public class BaseOrderService {
    public String status() { return "base"; }
}

public class OrderService extends BaseOrderService {
    @SuppressWarnings({"unchecked"})
    public String status() { return "active"; }
}

a004: Varargs mit Generics absichern

Englischer technischer Begriff
Safe Varargs Contract
Annotation
@SafeVarargs
Import/Package
java.lang
Priorität
6/10
Einsatzort
finale oder statische Hilfsmethoden
Wichtige Parameter
keine Parameter
Warum wichtig
Dokumentiert, dass keine Heap-Pollution erzeugt wird.
Typischer Fehler
Auf unsichere Varargs schreiben oder Array weiterreichen.
Enterprise-Einordnung
Relevant für Utility APIs, die Collections bündeln.
Ausgangspunkt-Code
public class OrderService {
    public String status() {
        return "active";
    }
}
Ziel-Code
public class BaseOrderService {
    public String status() { return "base"; }
}

public class OrderService extends BaseOrderService {
    @SafeVarargs
    public String status() { return "active"; }
}

a005: Funktionales Interface stabilisieren

Englischer technischer Begriff
Functional Interface Contract
Annotation
@FunctionalInterface
Import/Package
java.lang
Priorität
7/10
Einsatzort
Callbacks, Strategien, Adapter-Lambdas
Wichtige Parameter
keine Parameter
Warum wichtig
Sichert exakt eine abstrakte Methode.
Typischer Fehler
Später eine zweite abstrakte Methode hinzufügen und Lambdas brechen.
Enterprise-Einordnung
Sauber für Strategy, Policy und Event-Handler-Schnittstellen.
Ausgangspunkt-Code
public class OrderService {
    public String status() {
        return "active";
    }
}
Ziel-Code
@FunctionalInterface
public interface OrderPricingRule {
    java.math.BigDecimal calculate(java.math.BigDecimal netAmount);
}

a006: Zielorte eigener Annotation festlegen

Englischer technischer Begriff
Annotation Target
Annotation
@Target
Import/Package
java.lang.annotation
Priorität
8/10
Einsatzort
eigene Enterprise-Annotationen
Wichtige Parameter
value; ElementType.TYPE; ElementType.METHOD; ElementType.PARAMETER
Warum wichtig
Verhindert falsche Verwendung an Feldern, Methoden oder Klassen.
Typischer Fehler
Annotation ohne Target überall zulassen.
Enterprise-Einordnung
Basis für interne Standards wie @Audited oder @BusinessOwner.
Ausgangspunkt-Code
public class OrderService {
    public String status() {
        return "active";
    }
}
Ziel-Code
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
import java.lang.annotation.RetentionPolicy;

@Target({ElementType.TYPE, ElementType.METHOD})
public @interface AuditedOperation {
    String value();
}

a007: Laufzeit-Sichtbarkeit eigener Annotation steuern

Englischer technischer Begriff
Annotation Retention Policy
Annotation
@Retention
Import/Package
java.lang.annotation
Priorität
8/10
Einsatzort
eigene Annotationen mit Reflection/AOP
Wichtige Parameter
value; SOURCE; CLASS; RUNTIME
Warum wichtig
RUNTIME ist nötig, wenn Frameworks die Annotation auswerten.
Typischer Fehler
RUNTIME vergessen und sich wundern, dass AOP/Scanner nichts findet.
Enterprise-Einordnung
Wichtig bei Spring AOP, CDI Interceptors und internen Architekturrichtlinien.
Ausgangspunkt-Code
public class OrderService {
    public String status() {
        return "active";
    }
}
Ziel-Code
import java.lang.annotation.Retention;
import java.lang.annotation.ElementType;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface AuditedOperation {
    String value();
}

a008: Annotation in JavaDoc sichtbar machen

Englischer technischer Begriff
Documented Annotation
Annotation
@Documented
Import/Package
java.lang.annotation
Priorität
4/10
Einsatzort
öffentliche Architekturanmerkungen
Wichtige Parameter
keine Parameter
Warum wichtig
Macht Policies in generierter Doku sichtbar.
Typischer Fehler
Interne Annotationen dokumentieren, aber fachliche Wirkung nicht beschreiben.
Enterprise-Einordnung
Hilfreich für API-Governance und Plattformstandards.
Ausgangspunkt-Code
public class OrderService {
    public String status() {
        return "active";
    }
}
Ziel-Code
import java.lang.annotation.Documented;

@Documented
public @interface AuditedOperation {
    String value();
}

a009: Annotation vererbbar machen

Englischer technischer Begriff
Inherited Annotation
Annotation
@Inherited
Import/Package
java.lang.annotation
Priorität
5/10
Einsatzort
Klassenhierarchien
Wichtige Parameter
keine Parameter
Warum wichtig
Annotationen auf Basisklassen können in Subklassen sichtbar bleiben.
Typischer Fehler
Erwarten, dass @Inherited auf Methoden oder Interfaces wirkt.
Enterprise-Einordnung
Nur gezielt bei Framework-Basisbausteinen einsetzen.
Ausgangspunkt-Code
public class OrderService {
    public String status() {
        return "active";
    }
}
Ziel-Code
import java.lang.annotation.Inherited;

@Inherited
public @interface AuditedOperation {
    String value();
}

a010: Wiederholbare Fachregeln modellieren

Englischer technischer Begriff
Repeatable Annotation
Annotation
@Repeatable
Import/Package
java.lang.annotation
Priorität
6/10
Einsatzort
interne Regelannotation
Wichtige Parameter
value = ContainerAnnotation.class
Warum wichtig
Mehrere gleiche Annotationen auf einem Element werden möglich.
Typischer Fehler
Container-Annotation falsch definieren oder Retention nicht angleichen.
Enterprise-Einordnung
Nützlich für Audits, Fachregeln und Mapping-Regeln.
Ausgangspunkt-Code
public class OrderService {
    public String status() {
        return "active";
    }
}
Ziel-Code
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
@Repeatable(BusinessRules.class)
public @interface BusinessRule {
    String value();
}

@Retention(RetentionPolicy.RUNTIME)
@interface BusinessRules {
    BusinessRule[] value();
}

a011: Nativer Konstantenwert kennzeichnen

Englischer technischer Begriff
Native Constant Marker
Annotation
@Native
Import/Package
java.lang.annotation
Priorität
2/10
Einsatzort
Interop-Konstanten
Wichtige Parameter
keine Parameter
Warum wichtig
Kennzeichnet Konstanten für native Header-Generierung.
Typischer Fehler
In normalen Enterprise-Services einsetzen, obwohl kein nativer Bezug besteht.
Enterprise-Einordnung
Selten, eher bei Low-Level-Integration.
Ausgangspunkt-Code
public class OrderService {
    public String status() {
        return "active";
    }
}
Ziel-Code
import java.lang.annotation.Native;

public class NativeBridgeCodes {
    @Native
    public static final int ORDER_LOCK_CODE = 42;
}

a012: Eigene Audit-Annotation definieren

Englischer technischer Begriff
Custom Runtime Annotation
Annotation
@interface
Import/Package
java.lang.annotation
Priorität
8/10
Einsatzort
Architekturstandards
Wichtige Parameter
value; owner; risk
Warum wichtig
Eigene Annotationen geben Policies maschinenlesbar an.
Typischer Fehler
Annotation definieren, aber nie per Test/Scanner auswerten.
Enterprise-Einordnung
Trägt Architekturentscheidungen direkt am Code.
Ausgangspunkt-Code
public class OrderService {
    public String status() {
        return "active";
    }
}
Ziel-Code
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AuditedOperation {
    String owner();
    int risk();
}
Jakarta CDI, Dependency Injection und Lifecycle33 Einträge

a013: Abhängigkeit per CDI injizieren

Englischer technischer Begriff
Dependency Injection
Annotation
@Inject
Import/Package
jakarta.inject
Priorität
10/10
Einsatzort
Services, Ports, Repositories
Wichtige Parameter
keine Parameter
Warum wichtig
Entkoppelt Erzeugung von Nutzung.
Typischer Fehler
new Operator im Fachservice statt Container-Injektion.
Enterprise-Einordnung
Basis für testbare Enterprise-Komponenten.
Ausgangspunkt-Code
public class InvoiceService {
    private final java.time.Clock clock = java.time.Clock.systemUTC();

    public String create(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.inject.Inject;

@Inject
public class InvoiceService {
    public String create(String orderId) {
        return "invoice-" + orderId;
    }
}

a014: Bean eindeutig benennen

Englischer technischer Begriff
Named Bean
Annotation
@Named
Import/Package
jakarta.inject
Priorität
6/10
Einsatzort
CDI Beans, EL, JSF/JSP-Brücken
Wichtige Parameter
value
Warum wichtig
Macht Beans adressierbar, wenn ein Name gebraucht wird.
Typischer Fehler
Unnötig alle Beans benennen und globale Namenskonflikte erzeugen.
Enterprise-Einordnung
Wichtig bei Legacy-UI-Integration.
Ausgangspunkt-Code
public class InvoiceService {
    private final java.time.Clock clock = java.time.Clock.systemUTC();

    public String create(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.inject.Named;

@Named("invoiceService")
public class InvoiceService {
    public String create(String orderId) {
        return "invoice-" + orderId;
    }
}

a015: Anwendungsweite Bean definieren

Englischer technischer Begriff
Application Scoped Bean
Annotation
@ApplicationScoped
Import/Package
jakarta.enterprise.context
Priorität
8/10
Einsatzort
stateless Konfiguration, Adapter, Mapper
Wichtige Parameter
keine Parameter
Warum wichtig
Teilt eine Bean über die Anwendung.
Typischer Fehler
Mutable, nicht thread-safe Felder in ApplicationScoped halten.
Enterprise-Einordnung
Gut für stateless Services und Caches mit klarer Synchronisation.
Ausgangspunkt-Code
public class InvoiceService {
    private final java.time.Clock clock = java.time.Clock.systemUTC();

    public String create(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.enterprise.context.ApplicationScoped;

@ApplicationScoped
public class InvoiceService {
    public String create(String orderId) {
        return "invoice-" + orderId;
    }
}

a016: Request-lokale Bean definieren

Englischer technischer Begriff
Request Scoped Bean
Annotation
@RequestScoped
Import/Package
jakarta.enterprise.context
Priorität
8/10
Einsatzort
HTTP Request State
Wichtige Parameter
keine Parameter
Warum wichtig
Lebt genau pro Request.
Typischer Fehler
Request-Daten in Singleton/ApplicationScoped speichern.
Enterprise-Einordnung
Wichtig für Mandant, Korrelation und Benutzerkontext.
Ausgangspunkt-Code
public class InvoiceService {
    private final java.time.Clock clock = java.time.Clock.systemUTC();

    public String create(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.enterprise.context.RequestScoped;

@RequestScoped
public class InvoiceService {
    public String create(String orderId) {
        return "invoice-" + orderId;
    }
}

a017: Session-Zustand bewusst begrenzen

Englischer technischer Begriff
Session Scoped Bean
Annotation
@SessionScoped
Import/Package
jakarta.enterprise.context
Priorität
5/10
Einsatzort
klassische Web-Session
Wichtige Parameter
keine Parameter
Warum wichtig
Hält Zustand pro Benutzer-Session.
Typischer Fehler
Große Objekte oder EntityManager in SessionScoped speichern.
Enterprise-Einordnung
Bei Modernisierung eher sparsam einsetzen.
Ausgangspunkt-Code
public class InvoiceService {
    private final java.time.Clock clock = java.time.Clock.systemUTC();

    public String create(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.enterprise.context.SessionScoped;

@SessionScoped
public class InvoiceService {
    public String create(String orderId) {
        return "invoice-" + orderId;
    }
}

a018: Default CDI Scope verstehen

Englischer technischer Begriff
Dependent Scoped Bean
Annotation
@Dependent
Import/Package
jakarta.enterprise.context
Priorität
5/10
Einsatzort
Hilfsbeans und Producer-Produkte
Wichtige Parameter
keine Parameter
Warum wichtig
Bean lebt mit dem Injection Point.
Typischer Fehler
Dependent Bean mit teuren Ressourcen ohne klare Freigabe verwenden.
Enterprise-Einordnung
Gut für kleine abhängige Komponenten.
Ausgangspunkt-Code
public class InvoiceService {
    private final java.time.Clock clock = java.time.Clock.systemUTC();

    public String create(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.enterprise.context.Dependent;

@Dependent
public class InvoiceService {
    public String create(String orderId) {
        return "invoice-" + orderId;
    }
}

a019: Bean per Methode erzeugen

Englischer technischer Begriff
CDI Producer Method
Annotation
@Produces
Import/Package
jakarta.enterprise.inject
Priorität
8/10
Einsatzort
DataSource, Clock, ObjectMapper, Mandantenkontext
Wichtige Parameter
keine Parameter; Qualifier kombinierbar
Warum wichtig
Zentralisiert Erzeugung containerverwalteter Objekte.
Typischer Fehler
Producer ohne Qualifier erzeugt Mehrdeutigkeit.
Enterprise-Einordnung
Nützlich als Factory Pattern im CDI-Kontext.
Ausgangspunkt-Code
public class InvoiceService {
    private final java.time.Clock clock = java.time.Clock.systemUTC();

    public String create(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.enterprise.inject.Produces;

public class BillingClientFactory {
    @Produces
    public java.time.Clock billingClock() {
        return java.time.Clock.systemUTC();
    }
}

a020: Producer-Ressourcen sauber entsorgen

Englischer technischer Begriff
CDI Disposer Method
Annotation
@Disposes
Import/Package
jakarta.enterprise.inject
Priorität
7/10
Einsatzort
Producer mit Closeable-Ressourcen
Wichtige Parameter
keine Parameter; steht am Parameter
Warum wichtig
Schließt Ressourcen passend zum Producer-Lifecycle.
Typischer Fehler
Producer öffnet Ressource, aber niemand gibt sie frei.
Enterprise-Einordnung
Verhindert Leaks in Batch- und Integration Services.
Ausgangspunkt-Code
public class InvoiceService {
    private final java.time.Clock clock = java.time.Clock.systemUTC();

    public String create(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.enterprise.inject.Disposes;

public class ReportProducer {
    public void closeReport(@Disposes java.io.Closeable closeable) throws java.io.IOException {
        closeable.close();
    }
}

a021: Eigene Qualifier definieren

Englischer technischer Begriff
CDI Qualifier
Annotation
@Qualifier
Import/Package
jakarta.inject
Priorität
9/10
Einsatzort
mehrere Implementierungen eines Ports
Wichtige Parameter
keine Parameter; eigene Attribute möglich
Warum wichtig
Macht Injection eindeutig ohne String-Namen.
Typischer Fehler
@Named als technisches Routing missbrauchen.
Enterprise-Einordnung
Entscheidend bei Ports-and-Adapters und Multi-Provider-Systemen.
Ausgangspunkt-Code
public class InvoiceService {
    private final java.time.Clock clock = java.time.Clock.systemUTC();

    public String create(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.inject.Qualifier;

@Qualifier
public @interface BillingQualifier {
    String value() default "primary";
}

a022: Alternative Implementierung aktivieren

Englischer technischer Begriff
CDI Alternative
Annotation
@Alternative
Import/Package
jakarta.enterprise.inject
Priorität
6/10
Einsatzort
Test-/Migration-/Mandantenvarianten
Wichtige Parameter
keine Parameter
Warum wichtig
Erlaubt austauschbare Implementierungen.
Typischer Fehler
Alternative vergessen zu aktivieren oder Priorität unklar lassen.
Enterprise-Einordnung
Hilft bei Strangler- und Teststrategien.
Ausgangspunkt-Code
public class InvoiceService {
    private final java.time.Clock clock = java.time.Clock.systemUTC();

    public String create(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.enterprise.inject.Alternative;

@Alternative
public class InvoiceService {
    public String create(String orderId) {
        return "invoice-" + orderId;
    }
}

a023: Alternative priorisieren

Englischer technischer Begriff
CDI Priority
Annotation
@Priority
Import/Package
jakarta.annotation
Priorität
7/10
Einsatzort
Interceptors, Alternatives, Filters
Wichtige Parameter
value
Warum wichtig
Steuert Reihenfolge oder Aktivierung.
Typischer Fehler
Magische Zahlen ohne Dokumentation verwenden.
Enterprise-Einordnung
Wichtig bei Security-/Audit-Interceptor-Ketten.
Ausgangspunkt-Code
public class InvoiceService {
    private final java.time.Clock clock = java.time.Clock.systemUTC();

    public String create(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.annotation.Priority;

@Priority(100)
public class InvoiceService {
    public String create(String orderId) {
        return "invoice-" + orderId;
    }
}

a024: Initialisierung nach Injektion ausführen

Englischer technischer Begriff
Post Construct Lifecycle
Annotation
@PostConstruct
Import/Package
jakarta.annotation
Priorität
8/10
Einsatzort
Validierung nach DI
Wichtige Parameter
keine Parameter
Warum wichtig
Läuft, wenn Abhängigkeiten injiziert wurden.
Typischer Fehler
Im Konstruktor auf injizierte Felder zugreifen.
Enterprise-Einordnung
Wichtig für Adapter, die Abhängigkeiten prüfen.
Ausgangspunkt-Code
public class InvoiceService {
    private final java.time.Clock clock = java.time.Clock.systemUTC();

    public String create(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.annotation.PostConstruct;

public class BillingClientFactory {
    @PostConstruct
    public java.time.Clock billingClock() {
        return java.time.Clock.systemUTC();
    }
}

a025: Aufräumen vor Bean-Ende

Englischer technischer Begriff
Pre Destroy Lifecycle
Annotation
@PreDestroy
Import/Package
jakarta.annotation
Priorität
7/10
Einsatzort
Ressourcen, Scheduler, Clients
Wichtige Parameter
keine Parameter
Warum wichtig
Erlaubt geordnetes Freigeben.
Typischer Fehler
Threads, Clients oder Watcher offen lassen.
Enterprise-Einordnung
Verhindert Leaks beim Redeploy.
Ausgangspunkt-Code
public class InvoiceService {
    private final java.time.Clock clock = java.time.Clock.systemUTC();

    public String create(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.annotation.PreDestroy;

public class BillingClientFactory {
    @PreDestroy
    public java.time.Clock billingClock() {
        return java.time.Clock.systemUTC();
    }
}

a026: CDI Event beobachten

Englischer technischer Begriff
CDI Event Observer
Annotation
@Observes
Import/Package
jakarta.enterprise.event
Priorität
7/10
Einsatzort
Domain Events, Audit, Integration
Wichtige Parameter
notifyObserver; Reception; TransactionPhase
Warum wichtig
Entkoppelt Sender und Empfänger.
Typischer Fehler
Events für kritische synchrone Kernlogik missbrauchen.
Enterprise-Einordnung
Gut für modulare Enterprise-Reaktionen.
Ausgangspunkt-Code
public class InvoiceService {
    private final java.time.Clock clock = java.time.Clock.systemUTC();

    public String create(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.enterprise.event.Observes;

public class ReportProducer {
    public void closeReport(@Observes java.io.Closeable closeable) throws java.io.IOException {
        closeable.close();
    }
}

a027: Interceptor binden

Englischer technischer Begriff
CDI Interceptor Binding
Annotation
@InterceptorBinding
Import/Package
jakarta.interceptor
Priorität
8/10
Einsatzort
Audit, Security, Metriken
Wichtige Parameter
keine Parameter; eigene Attribute möglich
Warum wichtig
Markiert Annotationen als Interceptor-Auslöser.
Typischer Fehler
Binding-Attribute nicht mit @Nonbinding absichern.
Enterprise-Einordnung
Basis für Cross-Cutting Concerns.
Ausgangspunkt-Code
public class InvoiceService {
    private final java.time.Clock clock = java.time.Clock.systemUTC();

    public String create(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.interceptor.InterceptorBinding;

@InterceptorBinding
public @interface BillingQualifier {
    String value() default "primary";
}

a028: Interceptor aktivieren

Englischer technischer Begriff
CDI Interceptor
Annotation
@Interceptor
Import/Package
jakarta.interceptor
Priorität
7/10
Einsatzort
technische Querschnittslogik
Wichtige Parameter
keine Parameter
Warum wichtig
Kapselt Querschnittscode außerhalb der Fachlogik.
Typischer Fehler
Interceptor-Reihenfolge und Nebenwirkungen ignorieren.
Enterprise-Einordnung
Ersetzt Copy/Paste-Audit in Services.
Ausgangspunkt-Code
public class InvoiceService {
    private final java.time.Clock clock = java.time.Clock.systemUTC();

    public String create(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.interceptor.Interceptor;

@Interceptor
public class InvoiceService {
    public String create(String orderId) {
        return "invoice-" + orderId;
    }
}

a029: Vetoed gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jakarta CDI Annotation
Annotation
@Vetoed
Import/Package
jakarta.enterprise.inject
Priorität
6/10
Einsatzort
CDI Bean, Scope, Qualifier oder Interceptor
Wichtige Parameter
keine Parameter
Warum wichtig
Steuert Bean-Lebenszyklus und Dependency Injection präzise.
Typischer Fehler
CDI-Verhalten implizit lassen und Ambiguitäten erzeugen.
Enterprise-Einordnung
Relevant bei Jakarta EE, Quarkus und alten Application-Servern.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import jakarta.enterprise.inject.Vetoed;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;

@Vetoed
@ApplicationScoped
public class BillingService {
    public String createInvoice(String orderId) { return "invoice-for-" + orderId; }
}

a030: Stereotype gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jakarta CDI Annotation
Annotation
@Stereotype
Import/Package
jakarta.enterprise.inject
Priorität
6/10
Einsatzort
CDI Bean, Scope, Qualifier oder Interceptor
Wichtige Parameter
keine Parameter
Warum wichtig
Steuert Bean-Lebenszyklus und Dependency Injection präzise.
Typischer Fehler
CDI-Verhalten implizit lassen und Ambiguitäten erzeugen.
Enterprise-Einordnung
Relevant bei Jakarta EE, Quarkus und alten Application-Servern.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import jakarta.enterprise.inject.Stereotype;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;

@Stereotype
@ApplicationScoped
public class BillingService {
    public String createInvoice(String orderId) { return "invoice-for-" + orderId; }
}

a031: Typed gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jakarta CDI Annotation
Annotation
@Typed
Import/Package
jakarta.enterprise.inject
Priorität
6/10
Einsatzort
CDI Bean, Scope, Qualifier oder Interceptor
Wichtige Parameter
value
Warum wichtig
Steuert Bean-Lebenszyklus und Dependency Injection präzise.
Typischer Fehler
CDI-Verhalten implizit lassen und Ambiguitäten erzeugen.
Enterprise-Einordnung
Relevant bei Jakarta EE, Quarkus und alten Application-Servern.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import jakarta.enterprise.inject.Typed;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;

@Typed(BillingPort.class)
@ApplicationScoped
public class BillingService {
    public String createInvoice(String orderId) { return "invoice-for-" + orderId; }
}

a032: Specializes gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jakarta CDI Annotation
Annotation
@Specializes
Import/Package
jakarta.enterprise.inject
Priorität
6/10
Einsatzort
CDI Bean, Scope, Qualifier oder Interceptor
Wichtige Parameter
keine Parameter
Warum wichtig
Steuert Bean-Lebenszyklus und Dependency Injection präzise.
Typischer Fehler
CDI-Verhalten implizit lassen und Ambiguitäten erzeugen.
Enterprise-Einordnung
Relevant bei Jakarta EE, Quarkus und alten Application-Servern.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import jakarta.enterprise.inject.Specializes;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;

@Specializes
@ApplicationScoped
public class BillingService {
    public String createInvoice(String orderId) { return "invoice-for-" + orderId; }
}

a033: Decorator gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jakarta CDI Annotation
Annotation
@Decorator
Import/Package
jakarta.decorator
Priorität
6/10
Einsatzort
CDI Bean, Scope, Qualifier oder Interceptor
Wichtige Parameter
keine Parameter
Warum wichtig
Steuert Bean-Lebenszyklus und Dependency Injection präzise.
Typischer Fehler
CDI-Verhalten implizit lassen und Ambiguitäten erzeugen.
Enterprise-Einordnung
Relevant bei Jakarta EE, Quarkus und alten Application-Servern.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import jakarta.decorator.Decorator;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;

@Decorator
@ApplicationScoped
public class BillingService {
    public String createInvoice(String orderId) { return "invoice-for-" + orderId; }
}

a034: Delegate gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jakarta CDI Annotation
Annotation
@Delegate
Import/Package
jakarta.decorator
Priorität
6/10
Einsatzort
CDI Bean, Scope, Qualifier oder Interceptor
Wichtige Parameter
keine Parameter
Warum wichtig
Steuert Bean-Lebenszyklus und Dependency Injection präzise.
Typischer Fehler
CDI-Verhalten implizit lassen und Ambiguitäten erzeugen.
Enterprise-Einordnung
Relevant bei Jakarta EE, Quarkus und alten Application-Servern.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import jakarta.decorator.Delegate;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;

@Delegate
@ApplicationScoped
public class BillingService {
    public String createInvoice(String orderId) { return "invoice-for-" + orderId; }
}

a035: Any gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jakarta CDI Annotation
Annotation
@Any
Import/Package
jakarta.enterprise.inject
Priorität
6/10
Einsatzort
CDI Bean, Scope, Qualifier oder Interceptor
Wichtige Parameter
keine Parameter
Warum wichtig
Steuert Bean-Lebenszyklus und Dependency Injection präzise.
Typischer Fehler
CDI-Verhalten implizit lassen und Ambiguitäten erzeugen.
Enterprise-Einordnung
Relevant bei Jakarta EE, Quarkus und alten Application-Servern.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import jakarta.enterprise.inject.Any;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;

@Any
@ApplicationScoped
public class BillingService {
    public String createInvoice(String orderId) { return "invoice-for-" + orderId; }
}

a036: Default gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jakarta CDI Annotation
Annotation
@Default
Import/Package
jakarta.enterprise.inject
Priorität
6/10
Einsatzort
CDI Bean, Scope, Qualifier oder Interceptor
Wichtige Parameter
keine Parameter
Warum wichtig
Steuert Bean-Lebenszyklus und Dependency Injection präzise.
Typischer Fehler
CDI-Verhalten implizit lassen und Ambiguitäten erzeugen.
Enterprise-Einordnung
Relevant bei Jakarta EE, Quarkus und alten Application-Servern.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import jakarta.enterprise.inject.Default;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;

@Default
@ApplicationScoped
public class BillingService {
    public String createInvoice(String orderId) { return "invoice-for-" + orderId; }
}

a037: Nonbinding gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jakarta CDI Annotation
Annotation
@Nonbinding
Import/Package
jakarta.enterprise.util
Priorität
6/10
Einsatzort
CDI Bean, Scope, Qualifier oder Interceptor
Wichtige Parameter
keine Parameter
Warum wichtig
Steuert Bean-Lebenszyklus und Dependency Injection präzise.
Typischer Fehler
CDI-Verhalten implizit lassen und Ambiguitäten erzeugen.
Enterprise-Einordnung
Relevant bei Jakarta EE, Quarkus und alten Application-Servern.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import jakarta.enterprise.util.Nonbinding;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;

@Nonbinding
@ApplicationScoped
public class BillingService {
    public String createInvoice(String orderId) { return "invoice-for-" + orderId; }
}

a038: Initialized gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jakarta CDI Annotation
Annotation
@Initialized
Import/Package
jakarta.enterprise.context
Priorität
6/10
Einsatzort
CDI Bean, Scope, Qualifier oder Interceptor
Wichtige Parameter
value
Warum wichtig
Steuert Bean-Lebenszyklus und Dependency Injection präzise.
Typischer Fehler
CDI-Verhalten implizit lassen und Ambiguitäten erzeugen.
Enterprise-Einordnung
Relevant bei Jakarta EE, Quarkus und alten Application-Servern.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import jakarta.enterprise.context.Initialized;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;

@Observes @Initialized(ApplicationScoped.class)
@ApplicationScoped
public class BillingService {
    public String createInvoice(String orderId) { return "invoice-for-" + orderId; }
}

a039: Destroyed gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jakarta CDI Annotation
Annotation
@Destroyed
Import/Package
jakarta.enterprise.context
Priorität
6/10
Einsatzort
CDI Bean, Scope, Qualifier oder Interceptor
Wichtige Parameter
value
Warum wichtig
Steuert Bean-Lebenszyklus und Dependency Injection präzise.
Typischer Fehler
CDI-Verhalten implizit lassen und Ambiguitäten erzeugen.
Enterprise-Einordnung
Relevant bei Jakarta EE, Quarkus und alten Application-Servern.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import jakarta.enterprise.context.Destroyed;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;

@Observes @Destroyed(ApplicationScoped.class)
@ApplicationScoped
public class BillingService {
    public String createInvoice(String orderId) { return "invoice-for-" + orderId; }
}

a040: BeforeDestroyed gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jakarta CDI Annotation
Annotation
@BeforeDestroyed
Import/Package
jakarta.enterprise.context
Priorität
6/10
Einsatzort
CDI Bean, Scope, Qualifier oder Interceptor
Wichtige Parameter
value
Warum wichtig
Steuert Bean-Lebenszyklus und Dependency Injection präzise.
Typischer Fehler
CDI-Verhalten implizit lassen und Ambiguitäten erzeugen.
Enterprise-Einordnung
Relevant bei Jakarta EE, Quarkus und alten Application-Servern.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import jakarta.enterprise.context.BeforeDestroyed;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;

@Observes @BeforeDestroyed(ApplicationScoped.class)
@ApplicationScoped
public class BillingService {
    public String createInvoice(String orderId) { return "invoice-for-" + orderId; }
}

a041: ConversationScoped gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jakarta CDI Annotation
Annotation
@ConversationScoped
Import/Package
jakarta.enterprise.context
Priorität
6/10
Einsatzort
CDI Bean, Scope, Qualifier oder Interceptor
Wichtige Parameter
keine Parameter
Warum wichtig
Steuert Bean-Lebenszyklus und Dependency Injection präzise.
Typischer Fehler
CDI-Verhalten implizit lassen und Ambiguitäten erzeugen.
Enterprise-Einordnung
Relevant bei Jakarta EE, Quarkus und alten Application-Servern.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import jakarta.enterprise.context.ConversationScoped;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;

@ConversationScoped
@ApplicationScoped
public class BillingService {
    public String createInvoice(String orderId) { return "invoice-for-" + orderId; }
}

a042: NormalScope gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jakarta CDI Annotation
Annotation
@NormalScope
Import/Package
jakarta.enterprise.context
Priorität
6/10
Einsatzort
CDI Bean, Scope, Qualifier oder Interceptor
Wichtige Parameter
passivating
Warum wichtig
Steuert Bean-Lebenszyklus und Dependency Injection präzise.
Typischer Fehler
CDI-Verhalten implizit lassen und Ambiguitäten erzeugen.
Enterprise-Einordnung
Relevant bei Jakarta EE, Quarkus und alten Application-Servern.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import jakarta.enterprise.context.NormalScope;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;

@NormalScope(passivating = false)
@ApplicationScoped
public class BillingService {
    public String createInvoice(String orderId) { return "invoice-for-" + orderId; }
}

a043: AroundConstruct gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jakarta CDI Annotation
Annotation
@AroundConstruct
Import/Package
jakarta.interceptor
Priorität
6/10
Einsatzort
CDI Bean, Scope, Qualifier oder Interceptor
Wichtige Parameter
keine Parameter
Warum wichtig
Steuert Bean-Lebenszyklus und Dependency Injection präzise.
Typischer Fehler
CDI-Verhalten implizit lassen und Ambiguitäten erzeugen.
Enterprise-Einordnung
Relevant bei Jakarta EE, Quarkus und alten Application-Servern.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import jakarta.interceptor.AroundConstruct;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;

@AroundConstruct
@ApplicationScoped
public class BillingService {
    public String createInvoice(String orderId) { return "invoice-for-" + orderId; }
}

a044: AroundTimeout gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jakarta CDI Annotation
Annotation
@AroundTimeout
Import/Package
jakarta.interceptor
Priorität
6/10
Einsatzort
CDI Bean, Scope, Qualifier oder Interceptor
Wichtige Parameter
keine Parameter
Warum wichtig
Steuert Bean-Lebenszyklus und Dependency Injection präzise.
Typischer Fehler
CDI-Verhalten implizit lassen und Ambiguitäten erzeugen.
Enterprise-Einordnung
Relevant bei Jakarta EE, Quarkus und alten Application-Servern.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import jakarta.interceptor.AroundTimeout;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;

@AroundTimeout
@ApplicationScoped
public class BillingService {
    public String createInvoice(String orderId) { return "invoice-for-" + orderId; }
}

a045: TransactionScoped gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jakarta CDI Annotation
Annotation
@TransactionScoped
Import/Package
jakarta.transaction
Priorität
6/10
Einsatzort
CDI Bean, Scope, Qualifier oder Interceptor
Wichtige Parameter
keine Parameter
Warum wichtig
Steuert Bean-Lebenszyklus und Dependency Injection präzise.
Typischer Fehler
CDI-Verhalten implizit lassen und Ambiguitäten erzeugen.
Enterprise-Einordnung
Relevant bei Jakarta EE, Quarkus und alten Application-Servern.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import jakarta.transaction.TransactionScoped;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;

@TransactionScoped
@ApplicationScoped
public class BillingService {
    public String createInvoice(String orderId) { return "invoice-for-" + orderId; }
}
Jakarta EE: EJB, Transaktionen, Security und Messaging21 Einträge

a046: Stateless Service Bean definieren

Englischer technischer Begriff
Stateless Session Bean
Annotation
@Stateless
Import/Package
jakarta.ejb
Priorität
9/10
Einsatzort
transaktionale Services
Wichtige Parameter
name; mappedName
Warum wichtig
Container verwaltet Pooling und Transaktionen.
Typischer Fehler
Zustand in Stateless Bean speichern.
Enterprise-Einordnung
Häufig in klassischen Java-EE-Legacy-Systemen.
Ausgangspunkt-Code
public class BillingBean {
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.ejb.Stateless;

@Stateless(name = "BillingService")
public class BillingBean {
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}

a047: Konversationszustand in EJB kapseln

Englischer technischer Begriff
Stateful Session Bean
Annotation
@Stateful
Import/Package
jakarta.ejb
Priorität
5/10
Einsatzort
Checkout-/Wizard-Flows
Wichtige Parameter
name; mappedName
Warum wichtig
Erlaubt zustandsbehaftete Interaktion.
Typischer Fehler
Stateful Bean als Cache oder Warenkorb-Müllhalde verwenden.
Enterprise-Einordnung
Bei Modernisierung oft Kandidat für expliziten State Store.
Ausgangspunkt-Code
public class BillingBean {
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.ejb.Stateful;

@Stateful(name = "CheckoutFlow")
public class BillingBean {
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}

a048: Singleton EJB bewusst synchronisieren

Englischer technischer Begriff
Singleton Session Bean
Annotation
@Singleton
Import/Package
jakarta.ejb
Priorität
7/10
Einsatzort
shared Cache, Scheduler State
Wichtige Parameter
name; mappedName
Warum wichtig
Genau eine Instanz im Container.
Typischer Fehler
Mutable Daten ohne @Lock schützen.
Enterprise-Einordnung
Kritisch bei globalen Caches.
Ausgangspunkt-Code
public class BillingBean {
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.ejb.Singleton;

@Singleton(name = "ExchangeRateCache")
public class BillingBean {
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}

a049: Singleton beim Start laden

Englischer technischer Begriff
Startup Singleton
Annotation
@Startup
Import/Package
jakarta.ejb
Priorität
6/10
Einsatzort
Warmup, Registries
Wichtige Parameter
keine Parameter
Warum wichtig
Initialisiert Bean beim Deployment.
Typischer Fehler
Teure Arbeit ohne Timeout beim Start blockiert Deployment.
Enterprise-Einordnung
Nützlich für Legacy-Bootstrap.
Ausgangspunkt-Code
public class BillingBean {
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.ejb.Startup;

@Startup
public class BillingBean {
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}

a050: EJB-Scheduler definieren

Englischer technischer Begriff
EJB Schedule
Annotation
@Schedule
Import/Package
jakarta.ejb
Priorität
7/10
Einsatzort
Nachtjobs
Wichtige Parameter
hour; minute; second; persistent; timezone; info
Warum wichtig
Container-Scheduler statt eigener Threads.
Typischer Fehler
persistent=true ohne Cluster-/Recovery-Konzept.
Enterprise-Einordnung
Relevant für Batchjobs in WebSphere/WildFly.
Ausgangspunkt-Code
public class BillingBean {
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.ejb.Schedule;

public class BillingBean {
    @Schedule(hour = "2", minute = "15", persistent = false)
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}

a051: Transaktionsmodus pro Methode setzen

Englischer technischer Begriff
Transaction Attribute
Annotation
@TransactionAttribute
Import/Package
jakarta.ejb
Priorität
10/10
Einsatzort
Audit, Billing, Outbox
Wichtige Parameter
value: REQUIRED, REQUIRES_NEW, MANDATORY, SUPPORTS, NOT_SUPPORTED, NEVER
Warum wichtig
Definiert Container-Transaktionsgrenze.
Typischer Fehler
REQUIRES_NEW blind verwenden und fachliche Konsistenz brechen.
Enterprise-Einordnung
Schlüsselannotation in EJB-Migration.
Ausgangspunkt-Code
public class BillingBean {
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.ejb.TransactionAttribute;
import jakarta.ejb.TransactionAttributeType;

public class BillingBean {
    @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}

a052: Bean- oder Container-Transaktionen unterscheiden

Englischer technischer Begriff
Transaction Management
Annotation
@TransactionManagement
Import/Package
jakarta.ejb
Priorität
7/10
Einsatzort
EJB Services
Wichtige Parameter
value: CONTAINER oder BEAN
Warum wichtig
Macht Transaktionssteuerung explizit.
Typischer Fehler
Bean-managed Transaktionen ohne zwingenden Grund.
Enterprise-Einordnung
Hilft bei JTA-Analyse.
Ausgangspunkt-Code
public class BillingBean {
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.ejb.TransactionManagement;
import jakarta.ejb.TransactionManagementType;

@TransactionManagement(TransactionManagementType.CONTAINER)
public class BillingBean {
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}

a053: EJB Methode asynchron ausführen

Englischer technischer Begriff
EJB Asynchronous Method
Annotation
@Asynchronous
Import/Package
jakarta.ejb
Priorität
6/10
Einsatzort
Benachrichtigungen, langsame Nebenläufe
Wichtige Parameter
keine Parameter
Warum wichtig
Container führt Methode asynchron aus.
Typischer Fehler
Fehlerbehandlung und Transaktionskontext ignorieren.
Enterprise-Einordnung
Legacy-Alternative zu modernen Queues.
Ausgangspunkt-Code
public class BillingBean {
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.ejb.Asynchronous;

public class BillingBean {
    @Asynchronous
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}

a054: Concurrency Lock am Singleton setzen

Englischer technischer Begriff
EJB Lock
Annotation
@Lock
Import/Package
jakarta.ejb
Priorität
7/10
Einsatzort
Singleton Cache Mutation
Wichtige Parameter
value: READ oder WRITE
Warum wichtig
Schützt Singleton-Zustand.
Typischer Fehler
WRITE überall setzen und Durchsatz zerstören.
Enterprise-Einordnung
Wichtig bei containerverwalteter Concurrency.
Ausgangspunkt-Code
public class BillingBean {
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.ejb.Lock;
import jakarta.ejb.LockType;

public class BillingBean {
    @Lock(LockType.WRITE)
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}

a055: Wartezeit auf Singleton Lock begrenzen

Englischer technischer Begriff
EJB Access Timeout
Annotation
@AccessTimeout
Import/Package
jakarta.ejb
Priorität
6/10
Einsatzort
Singleton-EJB Zugriff
Wichtige Parameter
value; unit
Warum wichtig
Verhindert endloses Warten.
Typischer Fehler
Timeout ohne fachliche Reaktion.
Enterprise-Einordnung
Hilft bei Produktionsdiagnose unter Last.
Ausgangspunkt-Code
public class BillingBean {
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.ejb.AccessTimeout;
import java.util.concurrent.TimeUnit;

public class BillingBean {
    @AccessTimeout(value = 3, unit = TimeUnit.SECONDS)
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}

a056: EJB Referenz injizieren

Englischer technischer Begriff
EJB Injection
Annotation
@EJB
Import/Package
jakarta.ejb
Priorität
6/10
Einsatzort
Legacy EJB-Kopplung
Wichtige Parameter
name; beanName; lookup
Warum wichtig
Macht EJB-Abhängigkeit explizit.
Typischer Fehler
JNDI-Lookups überall im Code verteilen.
Enterprise-Einordnung
Bei Migration durch CDI/Port ersetzen.
Ausgangspunkt-Code
public class BillingBean {
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.ejb.EJB;

public class BillingFacade {
    @EJB(beanName = "BillingService")
    private BillingBean billingBean;

    public String create(String orderId) {
        return billingBean.createInvoice(orderId);
    }
}

a057: Lokales EJB Interface markieren

Englischer technischer Begriff
Local Business Interface
Annotation
@Local
Import/Package
jakarta.ejb
Priorität
5/10
Einsatzort
in-VM EJB Aufrufe
Wichtige Parameter
value
Warum wichtig
Definiert lokale Sichtbarkeit.
Typischer Fehler
Remote verwenden, obwohl alles im gleichen Server läuft.
Enterprise-Einordnung
Relevant bei EAR-Aufteilung.
Ausgangspunkt-Code
public class BillingBean {
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.ejb.Local;

@Local
public class BillingBean {
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}

a058: Remote EJB Interface markieren

Englischer technischer Begriff
Remote Business Interface
Annotation
@Remote
Import/Package
jakarta.ejb
Priorität
5/10
Einsatzort
remote EJB Clients
Wichtige Parameter
value
Warum wichtig
Definiert entfernte Schnittstelle.
Typischer Fehler
Remote für interne Modulkommunikation missbrauchen.
Enterprise-Einordnung
Kandidat für REST/Event-Migration.
Ausgangspunkt-Code
public class BillingBean {
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.ejb.Remote;

@Remote
public class BillingBean {
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}

a059: Jakarta Transactional Service markieren

Englischer technischer Begriff
Jakarta Transactional Boundary
Annotation
@Transactional
Import/Package
jakarta.transaction
Priorität
10/10
Einsatzort
CDI/Jakarta Services
Wichtige Parameter
value: REQUIRED, REQUIRES_NEW, MANDATORY, SUPPORTS, NOT_SUPPORTED, NEVER; rollbackOn; dontRollbackOn
Warum wichtig
Transaktionsgrenze ohne EJB.
Typischer Fehler
Checked Exceptions rollbacken nicht wie erwartet.
Enterprise-Einordnung
Zentral in Jakarta EE Modernisierung.
Ausgangspunkt-Code
public class BillingBean {
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.transaction.Transactional;
import jakarta.transaction.Transactional;

public class BillingBean {
    @Transactional(value = Transactional.TxType.REQUIRED, rollbackOn = RuntimeException.class)
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}

a060: Rollback-Ausnahme markieren

Englischer technischer Begriff
Application Exception
Annotation
@ApplicationException
Import/Package
jakarta.ejb
Priorität
7/10
Einsatzort
fachliche Exceptions
Wichtige Parameter
rollback; inherited
Warum wichtig
Steuert, ob Exception Transaktion rollbackt.
Typischer Fehler
RuntimeException/Checked Exception Regeln verwechseln.
Enterprise-Einordnung
Sehr wichtig für Billing- und Payment-Logik.
Ausgangspunkt-Code
public class BillingBean {
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.ejb.ApplicationException;

@ApplicationException(rollback = true)
public class BillingBean {
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}

a061: Rollen auf Methode beschränken

Englischer technischer Begriff
Role-based Method Security
Annotation
@RolesAllowed
Import/Package
jakarta.annotation.security
Priorität
9/10
Einsatzort
EJB/JAX-RS Security
Wichtige Parameter
value
Warum wichtig
Deklarative Zugriffskontrolle am Einstiegspunkt.
Typischer Fehler
Rollen nur in UI prüfen.
Enterprise-Einordnung
Wichtig für Defense in Depth.
Ausgangspunkt-Code
public class BillingBean {
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.annotation.security.RolesAllowed;

public class BillingBean {
    @RolesAllowed({"BILLING_ADMIN", "AUDITOR"})
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}

a062: Zugriff ohne Login erlauben

Englischer technischer Begriff
Permit All Method Security
Annotation
@PermitAll
Import/Package
jakarta.annotation.security
Priorität
4/10
Einsatzort
Health, Public Info
Wichtige Parameter
keine Parameter
Warum wichtig
Macht öffentliche Methoden explizit.
Typischer Fehler
Zu breite öffentliche Freigabe.
Enterprise-Einordnung
Nur für bewusst offene Endpunkte.
Ausgangspunkt-Code
public class BillingBean {
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.annotation.security.PermitAll;

public class BillingBean {
    @PermitAll
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}

a063: Zugriff komplett sperren

Englischer technischer Begriff
Deny All Method Security
Annotation
@DenyAll
Import/Package
jakarta.annotation.security
Priorität
5/10
Einsatzort
interne Methoden
Wichtige Parameter
keine Parameter
Warum wichtig
Verhindert unbeabsichtigten Aufruf.
Typischer Fehler
DenyAll auf Klasse und Ausnahmen vergessen.
Enterprise-Einordnung
Nützlich bei harten Migrationsgrenzen.
Ausgangspunkt-Code
public class BillingBean {
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}
Ziel-Code
import jakarta.annotation.security.DenyAll;

public class BillingBean {
    @DenyAll
    public String createInvoice(String orderId) {
        return "invoice-" + orderId;
    }
}

a064: MessageDriven gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jakarta EJB Annotation
Annotation
@MessageDriven
Import/Package
jakarta.ejb
Priorität
5/10
Einsatzort
EJB Service, MDB oder Legacy-Container
Wichtige Parameter
activationConfig; mappedName
Warum wichtig
Macht Containerdienste und Messaging-Verhalten sichtbar.
Typischer Fehler
EJB-Annotation ohne Transaktions-/Threading-Folgen nutzen.
Enterprise-Einordnung
Wichtig fuer WebSphere-/EJB-Legacy-Verständnis.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import jakarta.ejb.MessageDriven;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;

@MessageDriven(activationConfig = {@ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "jms/InvoiceQueue")})
@ApplicationScoped
public class BillingService {
    public String createInvoice(String orderId) { return "invoice-for-" + orderId; }
}

a065: ActivationConfigProperty gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jakarta EJB Annotation
Annotation
@ActivationConfigProperty
Import/Package
jakarta.ejb
Priorität
5/10
Einsatzort
EJB Service, MDB oder Legacy-Container
Wichtige Parameter
propertyName; propertyValue
Warum wichtig
Macht Containerdienste und Messaging-Verhalten sichtbar.
Typischer Fehler
EJB-Annotation ohne Transaktions-/Threading-Folgen nutzen.
Enterprise-Einordnung
Wichtig fuer WebSphere-/EJB-Legacy-Verständnis.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import jakarta.ejb.ActivationConfigProperty;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;

@MessageDriven(activationConfig = {@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "jakarta.jms.Queue")})
@ApplicationScoped
public class BillingService {
    public String createInvoice(String orderId) { return "invoice-for-" + orderId; }
}

a066: LocalBean gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jakarta EJB Annotation
Annotation
@LocalBean
Import/Package
jakarta.ejb
Priorität
5/10
Einsatzort
EJB Service, MDB oder Legacy-Container
Wichtige Parameter
keine Parameter
Warum wichtig
Macht Containerdienste und Messaging-Verhalten sichtbar.
Typischer Fehler
EJB-Annotation ohne Transaktions-/Threading-Folgen nutzen.
Enterprise-Einordnung
Wichtig fuer WebSphere-/EJB-Legacy-Verständnis.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import jakarta.ejb.LocalBean;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;

@LocalBean
@ApplicationScoped
public class BillingService {
    public String createInvoice(String orderId) { return "invoice-for-" + orderId; }
}
JPA und Hibernate Mapping, Queries und Lifecycle100 Einträge

a067: Persistente Klasse als Entity markieren

Englischer technischer Begriff
JPA Entity
Annotation
@Entity
Import/Package
jakarta.persistence
Priorität
10/10
Einsatzort
Datenmodell
Wichtige Parameter
name
Warum wichtig
Macht Klasse persistent.
Typischer Fehler
Entity ohne no-arg Konstruktor oder mit fachlicher Logik überladen.
Enterprise-Einordnung
Kern jedes JPA-basierten Enterprise-Systems.
Ausgangspunkt-Code
public class OrderRecord {
    private Long id;
    private String status;

    boolean isPersistent() {
        return false;
    }
}
Ziel-Code
import jakarta.persistence.Entity;

@Entity(name = "OrderEntity")
public class OrderEntity {
    @jakarta.persistence.Id
    private Long id;

    private String status;
}

a068: Tabellenname explizit setzen

Englischer technischer Begriff
JPA Table Mapping
Annotation
@Table
Import/Package
jakarta.persistence
Priorität
9/10
Einsatzort
Datenbankschema
Wichtige Parameter
name; schema; catalog; indexes; uniqueConstraints
Warum wichtig
Entkoppelt Java-Namen vom DB-Namen.
Typischer Fehler
Implicit Naming ungeprüft in Legacy-Schema laufen lassen.
Enterprise-Einordnung
Wichtig bei Oracle/DB2 Legacy-Schemas.
Ausgangspunkt-Code
public class OrderRecord {
    private Long id;
    private String status;

    boolean isPersistent() {
        return false;
    }
}
Ziel-Code
import jakarta.persistence.Table;
import jakarta.persistence.Entity;

@Entity
@Table(name = "orders", schema = "billing")
public class OrderEntity {
    @jakarta.persistence.Id
    private Long id;

    private String status;
}

a069: Primärschlüssel markieren

Englischer technischer Begriff
JPA Identifier
Annotation
@Id
Import/Package
jakarta.persistence
Priorität
10/10
Einsatzort
Entity Identifier
Wichtige Parameter
keine Parameter
Warum wichtig
Definiert technische Identität.
Typischer Fehler
ID nach Persistierung ändern.
Enterprise-Einordnung
Zentral für Cache, Persistenzkontext und Gleichheit.
Ausgangspunkt-Code
public class OrderRecord {
    private Long id;
    private String status;

    boolean isPersistent() {
        return false;
    }
}
Ziel-Code
import jakarta.persistence.Id;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;

@Entity
public class OrderEntity {
    @Id
    @Id
    private Long id;

    private String orderNumber;
}

a070: ID-Generierung konfigurieren

Englischer technischer Begriff
JPA Generated Value
Annotation
@GeneratedValue
Import/Package
jakarta.persistence
Priorität
9/10
Einsatzort
Entity IDs
Wichtige Parameter
strategy; generator
Warum wichtig
Steuert ID-Vergabe.
Typischer Fehler
AUTO auf Oracle/PostgreSQL ungeprüft verwenden.
Enterprise-Einordnung
Wichtig für Performance und Portabilität.
Ausgangspunkt-Code
public class OrderRecord {
    private Long id;
    private String status;

    boolean isPersistent() {
        return false;
    }
}
Ziel-Code
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.GenerationType;

@Entity
public class OrderEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "order_seq")
    private Long id;

    private String orderNumber;
}

a071: Sequenzgenerator passend konfigurieren

Englischer technischer Begriff
JPA Sequence Generator
Annotation
@SequenceGenerator
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
High-volume Entities
Wichtige Parameter
name; sequenceName; allocationSize; initialValue
Warum wichtig
Reduziert DB-Roundtrips.
Typischer Fehler
allocationSize passt nicht zur DB-Sequenz.
Enterprise-Einordnung
Typischer Performancehebel.
Ausgangspunkt-Code
public class OrderRecord {
    private Long id;
    private String status;

    boolean isPersistent() {
        return false;
    }
}
Ziel-Code
import jakarta.persistence.SequenceGenerator;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;

@Entity
public class OrderEntity {
    @Id
    @SequenceGenerator(name = "order_seq", sequenceName = "seq_order", allocationSize = 50)
    private Long id;

    private String orderNumber;
}

a072: Spalten präzise definieren

Englischer technischer Begriff
JPA Column Mapping
Annotation
@Column
Import/Package
jakarta.persistence
Priorität
10/10
Einsatzort
Entity Felder
Wichtige Parameter
name; nullable; length; precision; scale; insertable; updatable
Warum wichtig
Macht DB-Kontrakt explizit.
Typischer Fehler
nullable/length nur in DB, nicht im Code sichtbar.
Enterprise-Einordnung
Hilft beim Schema-Review.
Ausgangspunkt-Code
public class OrderRecord {
    private Long id;
    private String status;

    boolean isPersistent() {
        return false;
    }
}
Ziel-Code
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;

@Entity
public class OrderEntity {
    @Id
    @Column(name = "customer_no", nullable = false, length = 40)
    private Long id;

    private String orderNumber;
}

a073: Optimistisches Locking aktivieren

Englischer technischer Begriff
JPA Version Field
Annotation
@Version
Import/Package
jakarta.persistence
Priorität
10/10
Einsatzort
kritische Aggregate
Wichtige Parameter
keine Parameter
Warum wichtig
Erkennt Lost Updates.
Typischer Fehler
Version-Feld in DTO überschreiben.
Enterprise-Einordnung
Pflicht bei Orders, Payments, Inventory.
Ausgangspunkt-Code
public class OrderRecord {
    private Long id;
    private String status;

    boolean isPersistent() {
        return false;
    }
}
Ziel-Code
import jakarta.persistence.Version;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;

@Entity
public class OrderEntity {
    @Id
    @Version
    private Long id;

    private String orderNumber;
}

a074: Enum sicher speichern

Englischer technischer Begriff
JPA Enumerated Mapping
Annotation
@Enumerated
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Status-Felder
Wichtige Parameter
value: STRING oder ORDINAL
Warum wichtig
Verhindert kaputte Daten bei Enum-Reihenfolgeänderung.
Typischer Fehler
ORDINAL in langlebigen Tabellen verwenden.
Enterprise-Einordnung
Wichtig bei fachlichen Statusmodellen.
Ausgangspunkt-Code
public class OrderRecord {
    private Long id;
    private String status;

    boolean isPersistent() {
        return false;
    }
}
Ziel-Code
import jakarta.persistence.Enumerated;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.EnumType;

@Entity
public class OrderEntity {
    @Id
    @Enumerated(EnumType.STRING)
    private Long id;

    private String orderNumber;
}

a075: Große Daten getrennt behandeln

Englischer technischer Begriff
JPA Large Object
Annotation
@Lob
Import/Package
jakarta.persistence
Priorität
6/10
Einsatzort
Dokumentinhalt, Payload
Wichtige Parameter
keine Parameter
Warum wichtig
Markiert CLOB/BLOB.
Typischer Fehler
Lob im normalen Suchlisting eager laden.
Enterprise-Einordnung
Besser mit separater Ablage/Streaming prüfen.
Ausgangspunkt-Code
public class OrderRecord {
    private Long id;
    private String status;

    boolean isPersistent() {
        return false;
    }
}
Ziel-Code
import jakarta.persistence.Lob;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;

@Entity
public class OrderEntity {
    @Id
    @Lob
    private Long id;

    private String orderNumber;
}

a076: Nicht persistentes Feld markieren

Englischer technischer Begriff
JPA Transient Field
Annotation
@Transient
Import/Package
jakarta.persistence
Priorität
6/10
Einsatzort
berechnete Werte
Wichtige Parameter
keine Parameter
Warum wichtig
Schließt Feld aus Persistenz aus.
Typischer Fehler
transient Java Keyword mit JPA @Transient verwechseln.
Enterprise-Einordnung
Nützlich für Anzeige- und Berechnungsfelder.
Ausgangspunkt-Code
public class OrderRecord {
    private Long id;
    private String status;

    boolean isPersistent() {
        return false;
    }
}
Ziel-Code
import jakarta.persistence.Transient;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;

@Entity
public class OrderEntity {
    @Id
    @Transient
    private Long id;

    private String orderNumber;
}

a077: Viele-zu-eins Beziehung definieren

Englischer technischer Begriff
JPA Many-to-One
Annotation
@ManyToOne
Import/Package
jakarta.persistence
Priorität
9/10
Einsatzort
Order -> Customer
Wichtige Parameter
fetch; optional; cascade
Warum wichtig
Modelliert Referenz auf Parent.
Typischer Fehler
EAGER Standard unbewusst übernehmen.
Enterprise-Einordnung
Sehr wichtig gegen N+1 Probleme.
Ausgangspunkt-Code
public class OrderRecord {
    private Long id;
    private String status;

    boolean isPersistent() {
        return false;
    }
}
Ziel-Code
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.FetchType;

@Entity
public class OrderEntity {
    @Id
    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    private Long id;

    private String orderNumber;
}

a078: Join-Spalte explizit machen

Englischer technischer Begriff
JPA Join Column
Annotation
@JoinColumn
Import/Package
jakarta.persistence
Priorität
9/10
Einsatzort
Foreign Keys
Wichtige Parameter
name; referencedColumnName; nullable; foreignKey
Warum wichtig
Macht FK-Namen sichtbar.
Typischer Fehler
JoinColumn weglassen und falsche Spalte erzeugen lassen.
Enterprise-Einordnung
Wichtig bei Legacy-Datenbanken.
Ausgangspunkt-Code
public class OrderRecord {
    private Long id;
    private String status;

    boolean isPersistent() {
        return false;
    }
}
Ziel-Code
import jakarta.persistence.JoinColumn;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;

@Entity
public class OrderEntity {
    @Id
    @JoinColumn(name = "customer_id", nullable = false)
    private Long id;

    private String orderNumber;
}

a079: Eins-zu-viele Beziehung korrekt besitzen lassen

Englischer technischer Begriff
JPA One-to-Many
Annotation
@OneToMany
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Aggregate Children
Wichtige Parameter
mappedBy; cascade; orphanRemoval; fetch
Warum wichtig
Definiert Collection-Seite.
Typischer Fehler
Unidirektionales OneToMany ohne JoinColumn erzeugt Join-Tabelle.
Enterprise-Einordnung
Relevant für Aggregate Design.
Ausgangspunkt-Code
public class OrderRecord {
    private Long id;
    private String status;

    boolean isPersistent() {
        return false;
    }
}
Ziel-Code
import jakarta.persistence.OneToMany;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.CascadeType;

@Entity
public class OrderEntity {
    @Id
    @OneToMany(mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true)
    private Long id;

    private String orderNumber;
}

a080: Eins-zu-eins Beziehung gezielt mappen

Englischer technischer Begriff
JPA One-to-One
Annotation
@OneToOne
Import/Package
jakarta.persistence
Priorität
7/10
Einsatzort
Order -> Invoice
Wichtige Parameter
fetch; optional; cascade; mappedBy
Warum wichtig
Modelliert eindeutige Fachbeziehung.
Typischer Fehler
EAGER und Cascade.ALL unkritisch verwenden.
Enterprise-Einordnung
Bei Dokument-/Detailtabellen verbreitet.
Ausgangspunkt-Code
public class OrderRecord {
    private Long id;
    private String status;

    boolean isPersistent() {
        return false;
    }
}
Ziel-Code
import jakarta.persistence.OneToOne;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.FetchType;

@Entity
public class OrderEntity {
    @Id
    @OneToOne(fetch = FetchType.LAZY, optional = false)
    private Long id;

    private String orderNumber;
}

a081: Viele-zu-viele bewusst vermeiden oder mappen

Englischer technischer Begriff
JPA Many-to-Many
Annotation
@ManyToMany
Import/Package
jakarta.persistence
Priorität
5/10
Einsatzort
User <-> Role
Wichtige Parameter
mappedBy; cascade; fetch
Warum wichtig
Modelliert einfache Zuordnung.
Typischer Fehler
Fachliche Join-Attribute über ManyToMany verstecken.
Enterprise-Einordnung
Oft besser eigene Join-Entity nutzen.
Ausgangspunkt-Code
public class OrderRecord {
    private Long id;
    private String status;

    boolean isPersistent() {
        return false;
    }
}
Ziel-Code
import jakarta.persistence.ManyToMany;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.FetchType;

@Entity
public class OrderEntity {
    @Id
    @ManyToMany(fetch = FetchType.LAZY)
    private Long id;

    private String orderNumber;
}

a082: Join-Tabelle präzise definieren

Englischer technischer Begriff
JPA Join Table
Annotation
@JoinTable
Import/Package
jakarta.persistence
Priorität
7/10
Einsatzort
ManyToMany/Unidirectional OneToMany
Wichtige Parameter
name; joinColumns; inverseJoinColumns; uniqueConstraints
Warum wichtig
Kontrolliert Join-Tabellenname.
Typischer Fehler
Default-Namen ins Legacy-Schema schreiben.
Enterprise-Einordnung
Wichtig bei existierenden Datenbanken.
Ausgangspunkt-Code
public class OrderRecord {
    private Long id;
    private String status;

    boolean isPersistent() {
        return false;
    }
}
Ziel-Code
import jakarta.persistence.JoinTable;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;

@Entity
public class OrderEntity {
    @Id
    @JoinTable(name = "user_role")
    private Long id;

    private String orderNumber;
}

a083: Embeddable Value Object definieren

Englischer technischer Begriff
JPA Embeddable
Annotation
@Embeddable
Import/Package
jakarta.persistence
Priorität
7/10
Einsatzort
Adresse, Geldbetrag, Zeitraum
Wichtige Parameter
keine Parameter
Warum wichtig
Persistierbares Value Object ohne eigene Identität.
Typischer Fehler
Embeddables mit versteckter Entity-Logik überladen.
Enterprise-Einordnung
Gut für DDD-nahe Modelle.
Ausgangspunkt-Code
public class OrderRecord {
    private Long id;
    private String status;

    boolean isPersistent() {
        return false;
    }
}
Ziel-Code
import jakarta.persistence.Embeddable;

@Embeddable
public class MoneyAmount {
    private java.math.BigDecimal value;
    private String currency;
}

a084: Value Object einbetten

Englischer technischer Begriff
JPA Embedded
Annotation
@Embedded
Import/Package
jakarta.persistence
Priorität
7/10
Einsatzort
Adresse im Kunden
Wichtige Parameter
keine Parameter
Warum wichtig
Betten Felder in Entity-Tabelle ein.
Typischer Fehler
Spaltennamen-Kollisionen ignorieren.
Enterprise-Einordnung
Mit @AttributeOverride kombinieren.
Ausgangspunkt-Code
public class OrderRecord {
    private Long id;
    private String status;

    boolean isPersistent() {
        return false;
    }
}
Ziel-Code
import jakarta.persistence.Embedded;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;

@Entity
public class InvoiceEntity {
    @Id
    private Long id;

    @Embedded
    private BillingAddress billingAddress;
}

a085: Spalten eines Embeddables überschreiben

Englischer technischer Begriff
JPA Attribute Override
Annotation
@AttributeOverride
Import/Package
jakarta.persistence
Priorität
6/10
Einsatzort
mehrfach genutzte Embeddables
Wichtige Parameter
name; column
Warum wichtig
Passt Spalten je Einsatzort an.
Typischer Fehler
Gleiches Embeddable zweimal ohne Overrides verwenden.
Enterprise-Einordnung
Wichtig bei Rechnungs-/Lieferadresse.
Ausgangspunkt-Code
public class OrderRecord {
    private Long id;
    private String status;

    boolean isPersistent() {
        return false;
    }
}
Ziel-Code
import jakarta.persistence.AttributeOverride;

@Entity
public class OrderEntity {
    @Id
    @AttributeOverride(name = "zipCode", column = @Column(name = "billing_zip"))
    private Long id;

    private String orderNumber;
}

a086: Wertkollektion mappen

Englischer technischer Begriff
JPA Element Collection
Annotation
@ElementCollection
Import/Package
jakarta.persistence
Priorität
6/10
Einsatzort
Tags, einfache Codes
Wichtige Parameter
fetch; targetClass
Warum wichtig
Speichert einfache Werte in Collection Table.
Typischer Fehler
Für große fachliche Aggregate missbrauchen.
Enterprise-Einordnung
Gut für kleine Listen ohne eigene Identität.
Ausgangspunkt-Code
public class OrderRecord {
    private Long id;
    private String status;

    boolean isPersistent() {
        return false;
    }
}
Ziel-Code
import jakarta.persistence.ElementCollection;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.FetchType;

@Entity
public class OrderEntity {
    @Id
    @ElementCollection(fetch = FetchType.LAZY)
    private Long id;

    private String orderNumber;
}

a087: Collection-Tabelle benennen

Englischer technischer Begriff
JPA Collection Table
Annotation
@CollectionTable
Import/Package
jakarta.persistence
Priorität
6/10
Einsatzort
ElementCollection
Wichtige Parameter
name; joinColumns
Warum wichtig
Kontrolliert Tabelle für Wertkollektion.
Typischer Fehler
Default-Namen im Schema ungeprüft übernehmen.
Enterprise-Einordnung
Hilft bei Datenbank-Governance.
Ausgangspunkt-Code
public class OrderRecord {
    private Long id;
    private String status;

    boolean isPersistent() {
        return false;
    }
}
Ziel-Code
import jakarta.persistence.CollectionTable;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;

@Entity
public class OrderEntity {
    @Id
    @CollectionTable(name = "order_tags")
    private Long id;

    private String orderNumber;
}

a088: Benannte Query definieren

Englischer technischer Begriff
JPA Named Query
Annotation
@NamedQuery
Import/Package
jakarta.persistence
Priorität
6/10
Einsatzort
wiederverwendete Queries
Wichtige Parameter
name; query; hints
Warum wichtig
Query wird beim Start validiert.
Typischer Fehler
Dynamische Strings überall duplizieren.
Enterprise-Einordnung
Nützlich bei Legacy-Repositories.
Ausgangspunkt-Code
public class OrderRecord {
    private Long id;
    private String status;

    boolean isPersistent() {
        return false;
    }
}
Ziel-Code
import jakarta.persistence.NamedQuery;
import jakarta.persistence.Entity;

@Entity
@NamedQuery(name = "Order.findOpen", query = "select o from OrderEntity o where o.status = 'OPEN'")
public class OrderEntity {
    @jakarta.persistence.Id
    private Long id;

    private String status;
}

a089: EntityGraph gegen N+1 definieren

Englischer technischer Begriff
JPA Named Entity Graph
Annotation
@NamedEntityGraph
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Ladepläne
Wichtige Parameter
name; attributeNodes; subgraphs
Warum wichtig
Macht Fetch-Plan explizit.
Typischer Fehler
JOIN FETCH überall verstreuen.
Enterprise-Einordnung
Wichtig für Performance-Analyse.
Ausgangspunkt-Code
public class OrderRecord {
    private Long id;
    private String status;

    boolean isPersistent() {
        return false;
    }
}
Ziel-Code
import jakarta.persistence.NamedEntityGraph;
import jakarta.persistence.Entity;

@Entity
@NamedEntityGraph(name = "Order.withLines")
public class OrderEntity {
    @jakarta.persistence.Id
    private Long id;

    private String status;
}

a090: Attributknoten im EntityGraph setzen

Englischer technischer Begriff
JPA Named Attribute Node
Annotation
@NamedAttributeNode
Import/Package
jakarta.persistence
Priorität
6/10
Einsatzort
EntityGraph
Wichtige Parameter
value; subgraph; keySubgraph
Warum wichtig
Gibt zu ladende Attribute an.
Typischer Fehler
Tiefe Graphen ohne Use Case definieren.
Enterprise-Einordnung
Performance-Werkzeug für Lesemodelle.
Ausgangspunkt-Code
public class OrderRecord {
    private Long id;
    private String status;

    boolean isPersistent() {
        return false;
    }
}
Ziel-Code
import jakarta.persistence.NamedAttributeNode;
import jakarta.persistence.Entity;

@Entity
@NamedAttributeNode(value = "lines")
public class OrderEntity {
    @jakarta.persistence.Id
    private Long id;

    private String status;
}

a091: Cache-Strategie markieren

Englischer technischer Begriff
Hibernate Cache Annotation
Annotation
@Cache
Import/Package
org.hibernate.annotations
Priorität
6/10
Einsatzort
Second Level Cache
Wichtige Parameter
usage; region; include
Warum wichtig
Steuert Hibernate Cache.
Typischer Fehler
Cache einschalten ohne Invalidierungsstrategie.
Enterprise-Einordnung
Nur mit Messung und Cache-Konzept verwenden.
Ausgangspunkt-Code
public class OrderRecord {
    private Long id;
    private String status;

    boolean isPersistent() {
        return false;
    }
}
Ziel-Code
import org.hibernate.annotations.Cache;
import jakarta.persistence.Entity;

@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "orders")
public class OrderEntity {
    @jakarta.persistence.Id
    private Long id;

    private String status;
}

a092: BatchSize gegen N+1 einstellen

Englischer technischer Begriff
Hibernate Batch Size
Annotation
@BatchSize
Import/Package
org.hibernate.annotations
Priorität
7/10
Einsatzort
Collections/Associations
Wichtige Parameter
size
Warum wichtig
Bündelt Lazy Loads.
Typischer Fehler
Beliebige BatchSize ohne Datenprofil.
Enterprise-Einordnung
Pragmatischer Performancehebel.
Ausgangspunkt-Code
public class OrderRecord {
    private Long id;
    private String status;

    boolean isPersistent() {
        return false;
    }
}
Ziel-Code
import org.hibernate.annotations.BatchSize;
import jakarta.persistence.Entity;

@Entity
@BatchSize(size = 50)
public class OrderEntity {
    @jakarta.persistence.Id
    private Long id;

    private String status;
}

a093: Where-Klausel für Soft Delete setzen

Englischer technischer Begriff
Hibernate Where Clause
Annotation
@Where
Import/Package
org.hibernate.annotations
Priorität
5/10
Einsatzort
Soft Delete
Wichtige Parameter
clause
Warum wichtig
Filtert Entities automatisch.
Typischer Fehler
Administrationsfälle und Unique Constraints vergessen.
Enterprise-Einordnung
Besser mit klarer Löschstrategie verwenden.
Ausgangspunkt-Code
public class OrderRecord {
    private Long id;
    private String status;

    boolean isPersistent() {
        return false;
    }
}
Ziel-Code
import org.hibernate.annotations.Where;
import jakarta.persistence.Entity;

@Entity
@Where(clause = "deleted = false")
public class OrderEntity {
    @jakarta.persistence.Id
    private Long id;

    private String status;
}

a094: Creation Timestamp automatisch setzen

Englischer technischer Begriff
Hibernate Creation Timestamp
Annotation
@CreationTimestamp
Import/Package
org.hibernate.annotations
Priorität
6/10
Einsatzort
Audit-Spalten
Wichtige Parameter
source
Warum wichtig
Setzt Erstellzeitpunkt automatisch.
Typischer Fehler
DB-Zeit und App-Zeit vermischen.
Enterprise-Einordnung
Hilft bei Basis-Audit.
Ausgangspunkt-Code
public class OrderRecord {
    private Long id;
    private String status;

    boolean isPersistent() {
        return false;
    }
}
Ziel-Code
import org.hibernate.annotations.CreationTimestamp;

@Entity
public class OrderEntity {
    @Id
    @CreationTimestamp
    private Long id;

    private String orderNumber;
}

a095: Update Timestamp automatisch setzen

Englischer technischer Begriff
Hibernate Update Timestamp
Annotation
@UpdateTimestamp
Import/Package
org.hibernate.annotations
Priorität
6/10
Einsatzort
Audit-Spalten
Wichtige Parameter
source
Warum wichtig
Setzt Änderungszeitpunkt automatisch.
Typischer Fehler
Für fachliche Freigabezeitpunkte missbrauchen.
Enterprise-Einordnung
Technisches Audit, nicht Fachdatum.
Ausgangspunkt-Code
public class OrderRecord {
    private Long id;
    private String status;

    boolean isPersistent() {
        return false;
    }
}
Ziel-Code
import org.hibernate.annotations.UpdateTimestamp;

@Entity
public class OrderEntity {
    @Id
    @UpdateTimestamp
    private Long id;

    private String orderNumber;
}

a096: Basic gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@Basic
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
optional; fetch
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@Basic(optional = false, fetch = FetchType.LAZY)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a097: Access gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@Access
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
value
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@Access(AccessType.FIELD)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a098: MappedSuperclass gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@MappedSuperclass
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
keine Parameter
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@MappedSuperclass
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a099: Inheritance gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@Inheritance
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
strategy
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@Inheritance(strategy = InheritanceType.JOINED)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a100: DiscriminatorColumn gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@DiscriminatorColumn
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
name; discriminatorType; length
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@DiscriminatorColumn(name = "invoice_type", discriminatorType = DiscriminatorType.STRING)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a101: DiscriminatorValue gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@DiscriminatorValue
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
value
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@DiscriminatorValue("CREDIT_NOTE")
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a102: SecondaryTable gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@SecondaryTable
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
name; pkJoinColumns
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@SecondaryTable(name = "invoice_audit")
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a103: SecondaryTables gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@SecondaryTables
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
value
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@SecondaryTables({@SecondaryTable(name = "invoice_audit"), @SecondaryTable(name = "invoice_flags")})
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a104: PrimaryKeyJoinColumn gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@PrimaryKeyJoinColumn
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
name; referencedColumnName
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@PrimaryKeyJoinColumn(name = "invoice_id")
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a105: EmbeddedId gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@EmbeddedId
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
keine Parameter
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

public record InvoiceLineId(Long invoiceId, Integer lineNo) implements java.io.Serializable {}

@Entity
@Table(name = "invoice_line")
public class InvoiceLineEntity {
    @EmbeddedId
    private InvoiceLineId id;
}

a106: IdClass gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@IdClass
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
value
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@IdClass(InvoiceLineId.class)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a107: MapsId gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@MapsId
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
value
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@MapsId("invoiceId")
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a108: OrderBy gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@OrderBy
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
value
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@OrderBy("createdAt DESC")
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a109: OrderColumn gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@OrderColumn
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
name; nullable
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@OrderColumn(name = "line_order")
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a110: MapKey gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@MapKey
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
name
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@MapKey(name = "code")
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a111: MapKeyColumn gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@MapKeyColumn
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
name; length; nullable
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@MapKeyColumn(name = "property_key", length = 80)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a112: MapKeyEnumerated gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@MapKeyEnumerated
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
value
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@MapKeyEnumerated(EnumType.STRING)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a113: MapKeyTemporal gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@MapKeyTemporal
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
value
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@MapKeyTemporal(TemporalType.DATE)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a114: Convert gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@Convert
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
converter; disableConversion
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@Convert(converter = InvoiceStatusConverter.class)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a115: Converter gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@Converter
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
autoApply
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@Converter(autoApply = false)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a116: Converters gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@Converters
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
value
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@Converters({@Convert(converter = InvoiceStatusConverter.class)})
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a117: NamedQueries gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@NamedQueries
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
value
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@NamedQueries({@NamedQuery(name = "Invoice.open", query = "select i from InvoiceEntity i where i.paid = false")})
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a118: NamedNativeQuery gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@NamedNativeQuery
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
name; query; resultClass
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@NamedNativeQuery(name = "Invoice.overdue", query = "select * from invoice where due_date < current_date", resultClass = InvoiceEntity.class)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a119: NamedNativeQueries gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@NamedNativeQueries
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
value
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@NamedNativeQueries({@NamedNativeQuery(name = "Invoice.paid", query = "select * from invoice where paid = true", resultClass = InvoiceEntity.class)})
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a120: NamedStoredProcedureQuery gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@NamedStoredProcedureQuery
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
name; procedureName; parameters
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@NamedStoredProcedureQuery(name = "Invoice.recalculate", procedureName = "recalculate_invoice")
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a121: NamedStoredProcedureQueries gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@NamedStoredProcedureQueries
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
value
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@NamedStoredProcedureQueries({@NamedStoredProcedureQuery(name = "Invoice.closeMonth", procedureName = "close_billing_month")})
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a122: StoredProcedureParameter gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@StoredProcedureParameter
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
name; mode; type
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@NamedStoredProcedureQuery(name = "Invoice.total", procedureName = "invoice_total", parameters = @StoredProcedureParameter(name = "p_invoice_id", mode = ParameterMode.IN, type = Long.class))
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a123: SqlResultSetMapping gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@SqlResultSetMapping
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
name; entities; classes; columns
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@SqlResultSetMapping(name = "InvoiceSummaryMapping", columns = {@ColumnResult(name = "total")})
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a124: SqlResultSetMappings gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@SqlResultSetMappings
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
value
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@SqlResultSetMappings({@SqlResultSetMapping(name = "InvoiceTotalMapping", columns = @ColumnResult(name = "gross_total"))})
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a125: ConstructorResult gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@ConstructorResult
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
targetClass; columns
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@SqlResultSetMapping(name = "InvoiceDtoMapping", classes = @ConstructorResult(targetClass = InvoiceSummary.class, columns = @ColumnResult(name = "gross_total")))
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a126: ColumnResult gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@ColumnResult
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
name; type
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@SqlResultSetMapping(name = "InvoiceTotalMapping", columns = @ColumnResult(name = "gross_total", type = java.math.BigDecimal.class))
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a127: EntityResult gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@EntityResult
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
entityClass; fields
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@SqlResultSetMapping(name = "InvoiceEntityMapping", entities = @EntityResult(entityClass = InvoiceEntity.class))
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a128: FieldResult gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@FieldResult
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
name; column
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@SqlResultSetMapping(name = "InvoiceLegacyMapping", entities = @EntityResult(entityClass = InvoiceEntity.class, fields = @FieldResult(name = "invoiceNumber", column = "INV_NO")))
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a129: AssociationOverride gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@AssociationOverride
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
name; joinColumns; joinTable
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@AssociationOverride(name = "customer", joinColumns = @JoinColumn(name = "billing_customer_id"))
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a130: AssociationOverrides gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@AssociationOverrides
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
value
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@AssociationOverrides({@AssociationOverride(name = "customer", joinColumns = @JoinColumn(name = "bill_customer_id"))})
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a131: AttributeOverrides gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@AttributeOverrides
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
value
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@AttributeOverrides({@AttributeOverride(name = "amount", column = @Column(name = "gross_amount"))})
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a132: PersistenceContext gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@PersistenceContext
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
unitName; type; synchronization
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

public class InvoiceRepository {
    @PersistenceContext(unitName = "billingPU")
    private EntityManager entityManager;

    public InvoiceEntity find(Long id) { return entityManager.find(InvoiceEntity.class, id); }
}

a133: PersistenceUnit gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@PersistenceUnit
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
unitName
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

public class InvoiceRepository {
    @PersistenceUnit(unitName = "billingPU")
    private EntityManager entityManager;

    public InvoiceEntity find(Long id) { return entityManager.find(InvoiceEntity.class, id); }
}

a134: PrePersist gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@PrePersist
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
keine Parameter
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private java.time.Instant changedAt;

    @PrePersist
    void auditLifecycle() {
        this.changedAt = java.time.Instant.now();
    }
}

a135: PostPersist gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@PostPersist
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
keine Parameter
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private java.time.Instant changedAt;

    @PostPersist
    void auditLifecycle() {
        this.changedAt = java.time.Instant.now();
    }
}

a136: PreUpdate gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@PreUpdate
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
keine Parameter
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private java.time.Instant changedAt;

    @PreUpdate
    void auditLifecycle() {
        this.changedAt = java.time.Instant.now();
    }
}

a137: PostUpdate gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@PostUpdate
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
keine Parameter
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private java.time.Instant changedAt;

    @PostUpdate
    void auditLifecycle() {
        this.changedAt = java.time.Instant.now();
    }
}

a138: PreRemove gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@PreRemove
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
keine Parameter
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private java.time.Instant changedAt;

    @PreRemove
    void auditLifecycle() {
        this.changedAt = java.time.Instant.now();
    }
}

a139: PostRemove gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@PostRemove
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
keine Parameter
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private java.time.Instant changedAt;

    @PostRemove
    void auditLifecycle() {
        this.changedAt = java.time.Instant.now();
    }
}

a140: PostLoad gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@PostLoad
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
keine Parameter
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private java.time.Instant changedAt;

    @PostLoad
    void auditLifecycle() {
        this.changedAt = java.time.Instant.now();
    }
}

a141: EntityListeners gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@EntityListeners
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
value
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@EntityListeners(InvoiceAuditListener.class)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a142: ExcludeDefaultListeners gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@ExcludeDefaultListeners
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
keine Parameter
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@ExcludeDefaultListeners
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a143: ExcludeSuperclassListeners gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@ExcludeSuperclassListeners
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
keine Parameter
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@ExcludeSuperclassListeners
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a144: Temporal gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@Temporal
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
value
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@Temporal(TemporalType.TIMESTAMP)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a145: UniqueConstraint gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@UniqueConstraint
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
name; columnNames
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@Table(name = "invoice", uniqueConstraints = @UniqueConstraint(name = "uk_invoice_tenant_number", columnNames = {"tenant_id", "invoice_number"}))
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a146: Index gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@Index
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
name; columnList; unique
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@Table(name = "invoice", indexes = @Index(name = "idx_invoice_due_date", columnList = "due_date"))
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a147: ForeignKey gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Mapping-Annotation in JPA/Hibernate
Annotation
@ForeignKey
Import/Package
jakarta.persistence
Priorität
8/10
Einsatzort
Persistenzmodell, Repository und Migration
Wichtige Parameter
name; value
Warum wichtig
Macht Datenmodell, Query oder Lebenszyklusregel explizit.
Typischer Fehler
Annotation ohne Datenbank- und Transaktionswirkung zu verstehen.
Enterprise-Einordnung
Wichtig bei Legacy-DB, JPA-Refactoring und kontrollierter Modernisierung.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;

@JoinColumn(name = "customer_id", foreignKey = @ForeignKey(name = "fk_invoice_customer"))
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a148: NaturalId gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Hibernate-spezifische Mapping-Annotation
Annotation
@NaturalId
Import/Package
org.hibernate.annotations
Priorität
6/10
Einsatzort
Hibernate Entity Mapping
Wichtige Parameter
mutable
Warum wichtig
Erlaubt gezielte Optimierung oder Legacy-Abbildung.
Typischer Fehler
Hibernate-Spezialfeature ohne Portabilitätsentscheidung einsetzen.
Enterprise-Einordnung
Nur bewusst einsetzen, wenn JPA-Standard nicht reicht.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;

@NaturalId(mutable = false)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a149: Immutable gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Hibernate-spezifische Mapping-Annotation
Annotation
@Immutable
Import/Package
org.hibernate.annotations
Priorität
6/10
Einsatzort
Hibernate Entity Mapping
Wichtige Parameter
keine Parameter
Warum wichtig
Erlaubt gezielte Optimierung oder Legacy-Abbildung.
Typischer Fehler
Hibernate-Spezialfeature ohne Portabilitätsentscheidung einsetzen.
Enterprise-Einordnung
Nur bewusst einsetzen, wenn JPA-Standard nicht reicht.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;

@Immutable
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a150: Formula gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Hibernate-spezifische Mapping-Annotation
Annotation
@Formula
Import/Package
org.hibernate.annotations
Priorität
6/10
Einsatzort
Hibernate Entity Mapping
Wichtige Parameter
value
Warum wichtig
Erlaubt gezielte Optimierung oder Legacy-Abbildung.
Typischer Fehler
Hibernate-Spezialfeature ohne Portabilitätsentscheidung einsetzen.
Enterprise-Einordnung
Nur bewusst einsetzen, wenn JPA-Standard nicht reicht.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;

@Formula("gross_total - paid_total")
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a151: Filter gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Hibernate-spezifische Mapping-Annotation
Annotation
@Filter
Import/Package
org.hibernate.annotations
Priorität
6/10
Einsatzort
Hibernate Entity Mapping
Wichtige Parameter
name; condition
Warum wichtig
Erlaubt gezielte Optimierung oder Legacy-Abbildung.
Typischer Fehler
Hibernate-Spezialfeature ohne Portabilitätsentscheidung einsetzen.
Enterprise-Einordnung
Nur bewusst einsetzen, wenn JPA-Standard nicht reicht.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;

@Filter(name = "tenantFilter", condition = "tenant_id = :tenantId")
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a152: FilterDef gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Hibernate-spezifische Mapping-Annotation
Annotation
@FilterDef
Import/Package
org.hibernate.annotations
Priorität
6/10
Einsatzort
Hibernate Entity Mapping
Wichtige Parameter
name; parameters
Warum wichtig
Erlaubt gezielte Optimierung oder Legacy-Abbildung.
Typischer Fehler
Hibernate-Spezialfeature ohne Portabilitätsentscheidung einsetzen.
Enterprise-Einordnung
Nur bewusst einsetzen, wenn JPA-Standard nicht reicht.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;

@FilterDef(name = "tenantFilter", parameters = @ParamDef(name = "tenantId", type = String.class))
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a153: ParamDef gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Hibernate-spezifische Mapping-Annotation
Annotation
@ParamDef
Import/Package
org.hibernate.annotations
Priorität
6/10
Einsatzort
Hibernate Entity Mapping
Wichtige Parameter
name; type
Warum wichtig
Erlaubt gezielte Optimierung oder Legacy-Abbildung.
Typischer Fehler
Hibernate-Spezialfeature ohne Portabilitätsentscheidung einsetzen.
Enterprise-Einordnung
Nur bewusst einsetzen, wenn JPA-Standard nicht reicht.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;

@FilterDef(name = "customerFilter", parameters = @ParamDef(name = "customerId", type = Long.class))
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a154: SQLDelete gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Hibernate-spezifische Mapping-Annotation
Annotation
@SQLDelete
Import/Package
org.hibernate.annotations
Priorität
6/10
Einsatzort
Hibernate Entity Mapping
Wichtige Parameter
sql; callable; check
Warum wichtig
Erlaubt gezielte Optimierung oder Legacy-Abbildung.
Typischer Fehler
Hibernate-Spezialfeature ohne Portabilitätsentscheidung einsetzen.
Enterprise-Einordnung
Nur bewusst einsetzen, wenn JPA-Standard nicht reicht.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;

@SQLDelete(sql = "update invoice set deleted = true where id = ?")
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a155: SoftDelete gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Hibernate-spezifische Mapping-Annotation
Annotation
@SoftDelete
Import/Package
org.hibernate.annotations
Priorität
6/10
Einsatzort
Hibernate Entity Mapping
Wichtige Parameter
strategy; columnName
Warum wichtig
Erlaubt gezielte Optimierung oder Legacy-Abbildung.
Typischer Fehler
Hibernate-Spezialfeature ohne Portabilitätsentscheidung einsetzen.
Enterprise-Einordnung
Nur bewusst einsetzen, wenn JPA-Standard nicht reicht.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;

@SoftDelete(columnName = "deleted")
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a156: DynamicUpdate gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Hibernate-spezifische Mapping-Annotation
Annotation
@DynamicUpdate
Import/Package
org.hibernate.annotations
Priorität
6/10
Einsatzort
Hibernate Entity Mapping
Wichtige Parameter
keine Parameter
Warum wichtig
Erlaubt gezielte Optimierung oder Legacy-Abbildung.
Typischer Fehler
Hibernate-Spezialfeature ohne Portabilitätsentscheidung einsetzen.
Enterprise-Einordnung
Nur bewusst einsetzen, wenn JPA-Standard nicht reicht.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;

@DynamicUpdate
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a157: DynamicInsert gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Hibernate-spezifische Mapping-Annotation
Annotation
@DynamicInsert
Import/Package
org.hibernate.annotations
Priorität
6/10
Einsatzort
Hibernate Entity Mapping
Wichtige Parameter
keine Parameter
Warum wichtig
Erlaubt gezielte Optimierung oder Legacy-Abbildung.
Typischer Fehler
Hibernate-Spezialfeature ohne Portabilitätsentscheidung einsetzen.
Enterprise-Einordnung
Nur bewusst einsetzen, wenn JPA-Standard nicht reicht.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;

@DynamicInsert
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a158: Fetch gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Hibernate-spezifische Mapping-Annotation
Annotation
@Fetch
Import/Package
org.hibernate.annotations
Priorität
6/10
Einsatzort
Hibernate Entity Mapping
Wichtige Parameter
value
Warum wichtig
Erlaubt gezielte Optimierung oder Legacy-Abbildung.
Typischer Fehler
Hibernate-Spezialfeature ohne Portabilitätsentscheidung einsetzen.
Enterprise-Einordnung
Nur bewusst einsetzen, wenn JPA-Standard nicht reicht.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;

@Fetch(FetchMode.SUBSELECT)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a159: NotFound gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Hibernate-spezifische Mapping-Annotation
Annotation
@NotFound
Import/Package
org.hibernate.annotations
Priorität
6/10
Einsatzort
Hibernate Entity Mapping
Wichtige Parameter
action
Warum wichtig
Erlaubt gezielte Optimierung oder Legacy-Abbildung.
Typischer Fehler
Hibernate-Spezialfeature ohne Portabilitätsentscheidung einsetzen.
Enterprise-Einordnung
Nur bewusst einsetzen, wenn JPA-Standard nicht reicht.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;

@NotFound(action = NotFoundAction.IGNORE)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a160: OnDelete gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Hibernate-spezifische Mapping-Annotation
Annotation
@OnDelete
Import/Package
org.hibernate.annotations
Priorität
6/10
Einsatzort
Hibernate Entity Mapping
Wichtige Parameter
action
Warum wichtig
Erlaubt gezielte Optimierung oder Legacy-Abbildung.
Typischer Fehler
Hibernate-Spezialfeature ohne Portabilitätsentscheidung einsetzen.
Enterprise-Einordnung
Nur bewusst einsetzen, wenn JPA-Standard nicht reicht.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;

@OnDelete(action = OnDeleteAction.CASCADE)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a161: Subselect gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Hibernate-spezifische Mapping-Annotation
Annotation
@Subselect
Import/Package
org.hibernate.annotations
Priorität
6/10
Einsatzort
Hibernate Entity Mapping
Wichtige Parameter
value
Warum wichtig
Erlaubt gezielte Optimierung oder Legacy-Abbildung.
Typischer Fehler
Hibernate-Spezialfeature ohne Portabilitätsentscheidung einsetzen.
Enterprise-Einordnung
Nur bewusst einsetzen, wenn JPA-Standard nicht reicht.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;

@Subselect("select id, customer_id, gross_total from invoice_report_view")
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a162: Synchronize gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Hibernate-spezifische Mapping-Annotation
Annotation
@Synchronize
Import/Package
org.hibernate.annotations
Priorität
6/10
Einsatzort
Hibernate Entity Mapping
Wichtige Parameter
value
Warum wichtig
Erlaubt gezielte Optimierung oder Legacy-Abbildung.
Typischer Fehler
Hibernate-Spezialfeature ohne Portabilitätsentscheidung einsetzen.
Enterprise-Einordnung
Nur bewusst einsetzen, wenn JPA-Standard nicht reicht.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;

@Synchronize({"invoice", "invoice_line"})
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a163: UuidGenerator gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Hibernate-spezifische Mapping-Annotation
Annotation
@UuidGenerator
Import/Package
org.hibernate.annotations
Priorität
6/10
Einsatzort
Hibernate Entity Mapping
Wichtige Parameter
style
Warum wichtig
Erlaubt gezielte Optimierung oder Legacy-Abbildung.
Typischer Fehler
Hibernate-Spezialfeature ohne Portabilitätsentscheidung einsetzen.
Enterprise-Einordnung
Nur bewusst einsetzen, wenn JPA-Standard nicht reicht.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;

@UuidGenerator(style = UuidGenerator.Style.TIME)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a164: JdbcTypeCode gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Hibernate-spezifische Mapping-Annotation
Annotation
@JdbcTypeCode
Import/Package
org.hibernate.annotations
Priorität
6/10
Einsatzort
Hibernate Entity Mapping
Wichtige Parameter
value
Warum wichtig
Erlaubt gezielte Optimierung oder Legacy-Abbildung.
Typischer Fehler
Hibernate-Spezialfeature ohne Portabilitätsentscheidung einsetzen.
Enterprise-Einordnung
Nur bewusst einsetzen, wenn JPA-Standard nicht reicht.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;

@JdbcTypeCode(SqlTypes.JSON)
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a165: Nationalized gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Hibernate-spezifische Mapping-Annotation
Annotation
@Nationalized
Import/Package
org.hibernate.annotations
Priorität
6/10
Einsatzort
Hibernate Entity Mapping
Wichtige Parameter
keine Parameter
Warum wichtig
Erlaubt gezielte Optimierung oder Legacy-Abbildung.
Typischer Fehler
Hibernate-Spezialfeature ohne Portabilitätsentscheidung einsetzen.
Enterprise-Einordnung
Nur bewusst einsetzen, wenn JPA-Standard nicht reicht.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;

@Nationalized
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}

a166: TenantId gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Hibernate-spezifische Mapping-Annotation
Annotation
@TenantId
Import/Package
org.hibernate.annotations
Priorität
6/10
Einsatzort
Hibernate Entity Mapping
Wichtige Parameter
keine Parameter
Warum wichtig
Erlaubt gezielte Optimierung oder Legacy-Abbildung.
Typischer Fehler
Hibernate-Spezialfeature ohne Portabilitätsentscheidung einsetzen.
Enterprise-Einordnung
Nur bewusst einsetzen, wenn JPA-Standard nicht reicht.
Ausgangspunkt-Code
public class InvoiceEntity {
    private Long id;
    private String invoiceNumber;
}
Ziel-Code
import jakarta.persistence.*;
import java.util.*;
import org.hibernate.annotations.*;
import org.hibernate.type.SqlTypes;

@TenantId
@Entity
@Table(name = "invoice")
public class InvoiceEntity {
    @Id
    private Long id;
    private String invoiceNumber;
}
Bean Validation und Eingabevalidierung33 Einträge

a167: Pflichtfeld nicht null

Englischer technischer Begriff
Not Null Constraint
Annotation
@NotNull
Import/Package
jakarta.validation.constraints
Priorität
10/10
Einsatzort
DTOs, Entities, Config
Wichtige Parameter
message; groups; payload
Warum wichtig
Verhindert fehlende Pflichtwerte früh.
Typischer Fehler
Nur DB nullable=false nutzen und schlechte Fehlermeldungen erzeugen.
Enterprise-Einordnung
Basis für API- und Command-Validierung.
Ausgangspunkt-Code
public class CreateOrderRequest {
    private String customerNumber;

    boolean isValid() {
        return customerNumber != null;
    }
}
Ziel-Code
import jakarta.validation.constraints.NotNull;

public class CreateOrderRequest {
    @NotNull(message = "customerId is required")
    private String customerNumber;

    public String customerNumber() {
        return customerNumber;
    }
}

a168: Text darf nicht leer sein

Englischer technischer Begriff
Not Blank Constraint
Annotation
@NotBlank
Import/Package
jakarta.validation.constraints
Priorität
9/10
Einsatzort
String-Felder
Wichtige Parameter
message; groups; payload
Warum wichtig
Verbietet null, leer und whitespace.
Typischer Fehler
@NotNull für Strings verwenden und Leerzeichen akzeptieren.
Enterprise-Einordnung
Wichtig für IDs, Codes und Benutzereingaben.
Ausgangspunkt-Code
public class CreateOrderRequest {
    private String customerNumber;

    boolean isValid() {
        return customerNumber != null;
    }
}
Ziel-Code
import jakarta.validation.constraints.NotBlank;

public class CreateOrderRequest {
    @NotBlank(message = "orderNumber must not be blank")
    private String customerNumber;

    public String customerNumber() {
        return customerNumber;
    }
}

a169: Collection darf nicht leer sein

Englischer technischer Begriff
Not Empty Constraint
Annotation
@NotEmpty
Import/Package
jakarta.validation.constraints
Priorität
8/10
Einsatzort
Listen, Maps, Arrays
Wichtige Parameter
message; groups; payload
Warum wichtig
Fordert mindestens ein Element.
Typischer Fehler
Nur List != null prüfen.
Enterprise-Einordnung
Wichtig bei Aufträgen, Rollen, Anhängen.
Ausgangspunkt-Code
public class CreateOrderRequest {
    private String customerNumber;

    boolean isValid() {
        return customerNumber != null;
    }
}
Ziel-Code
import jakarta.validation.constraints.NotEmpty;

public class CreateOrderRequest {
    @NotEmpty(message = "line items required")
    private String customerNumber;

    public String customerNumber() {
        return customerNumber;
    }
}

a170: Länge oder Größe begrenzen

Englischer technischer Begriff
Size Constraint
Annotation
@Size
Import/Package
jakarta.validation.constraints
Priorität
9/10
Einsatzort
Strings und Collections
Wichtige Parameter
min; max; message; groups
Warum wichtig
Schützt DB-Längen und Fachregeln.
Typischer Fehler
UI-Limit setzen, Backend aber offen lassen.
Enterprise-Einordnung
Pflicht an API-Grenzen.
Ausgangspunkt-Code
public class CreateOrderRequest {
    private String customerNumber;

    boolean isValid() {
        return customerNumber != null;
    }
}
Ziel-Code
import jakarta.validation.constraints.Size;

public class CreateOrderRequest {
    @Size(min = 3, max = 40, message = "customerNo length invalid")
    private String customerNumber;

    public String customerNumber() {
        return customerNumber;
    }
}

a171: E-Mail Format prüfen

Englischer technischer Begriff
Email Constraint
Annotation
@Email
Import/Package
jakarta.validation.constraints
Priorität
6/10
Einsatzort
Kontaktfelder
Wichtige Parameter
regexp; flags; message
Warum wichtig
Prüft Format grob standardisiert.
Typischer Fehler
E-Mail-Validierung als Zustellbarkeitsgarantie verstehen.
Enterprise-Einordnung
Gut für Eingabequalität, nicht für Verifikation.
Ausgangspunkt-Code
public class CreateOrderRequest {
    private String customerNumber;

    boolean isValid() {
        return customerNumber != null;
    }
}
Ziel-Code
import jakarta.validation.constraints.Email;

public class CreateOrderRequest {
    @Email(message = "invalid billing email")
    private String customerNumber;

    public String customerNumber() {
        return customerNumber;
    }
}

a172: Regex-Regel zentralisieren

Englischer technischer Begriff
Pattern Constraint
Annotation
@Pattern
Import/Package
jakarta.validation.constraints
Priorität
8/10
Einsatzort
Codes, Referenzen
Wichtige Parameter
regexp; flags; message
Warum wichtig
Macht Formatregel deklarativ.
Typischer Fehler
Komplexe Fachlogik in Regex verstecken.
Enterprise-Einordnung
Gut für technische Codes.
Ausgangspunkt-Code
public class CreateOrderRequest {
    private String customerNumber;

    boolean isValid() {
        return customerNumber != null;
    }
}
Ziel-Code
import jakarta.validation.constraints.Pattern;

public class CreateOrderRequest {
    @Pattern(regexp = "[A-Z]{2}-[0-9]{6}", message = "invalid ticket code")
    private String customerNumber;

    public String customerNumber() {
        return customerNumber;
    }
}

a173: Mindestwert setzen

Englischer technischer Begriff
Min Constraint
Annotation
@Min
Import/Package
jakarta.validation.constraints
Priorität
8/10
Einsatzort
Ganzzahlen
Wichtige Parameter
value; message; groups
Warum wichtig
Verhindert zu kleine Werte.
Typischer Fehler
BigDecimal mit @Min statt @DecimalMin prüfen.
Enterprise-Einordnung
Wichtig für Mengen und Zähler.
Ausgangspunkt-Code
public class CreateOrderRequest {
    private String customerNumber;

    boolean isValid() {
        return customerNumber != null;
    }
}
Ziel-Code
import jakarta.validation.constraints.Min;

public class CreateOrderRequest {
    @Min(value = 1, message = "quantity must be positive")
    private String customerNumber;

    public String customerNumber() {
        return customerNumber;
    }
}

a174: Maximalwert setzen

Englischer technischer Begriff
Max Constraint
Annotation
@Max
Import/Package
jakarta.validation.constraints
Priorität
7/10
Einsatzort
Limits
Wichtige Parameter
value; message; groups
Warum wichtig
Schützt System- und Fachgrenzen.
Typischer Fehler
Unbegrenzte Anfragegrößen zulassen.
Enterprise-Einordnung
Wichtig für DoS-Schutz und Batchgrenzen.
Ausgangspunkt-Code
public class CreateOrderRequest {
    private String customerNumber;

    boolean isValid() {
        return customerNumber != null;
    }
}
Ziel-Code
import jakarta.validation.constraints.Max;

public class CreateOrderRequest {
    @Max(value = 999, message = "too many lines")
    private String customerNumber;

    public String customerNumber() {
        return customerNumber;
    }
}

a175: Positive Werte erzwingen

Englischer technischer Begriff
Positive Constraint
Annotation
@Positive
Import/Package
jakarta.validation.constraints
Priorität
8/10
Einsatzort
Mengen, Beträge
Wichtige Parameter
message; groups; payload
Warum wichtig
Verbietet null nicht automatisch und fordert > 0.
Typischer Fehler
@Positive ohne @NotNull verwenden, obwohl Pflichtfeld erwartet.
Enterprise-Einordnung
Mit @NotNull kombinieren.
Ausgangspunkt-Code
public class CreateOrderRequest {
    private String customerNumber;

    boolean isValid() {
        return customerNumber != null;
    }
}
Ziel-Code
import jakarta.validation.constraints.Positive;

public class CreateOrderRequest {
    @Positive(message = "amount must be positive")
    private String customerNumber;

    public String customerNumber() {
        return customerNumber;
    }
}

a176: Positive oder Null erlauben

Englischer technischer Begriff
Positive Or Zero Constraint
Annotation
@PositiveOrZero
Import/Package
jakarta.validation.constraints
Priorität
7/10
Einsatzort
Rabatt, Bestand
Wichtige Parameter
message; groups; payload
Warum wichtig
Erlaubt null und 0 je nach Kombination.
Typischer Fehler
Negativwerte nur in UI blocken.
Enterprise-Einordnung
Sinnvoll für Lager und Rabatte.
Ausgangspunkt-Code
public class CreateOrderRequest {
    private String customerNumber;

    boolean isValid() {
        return customerNumber != null;
    }
}
Ziel-Code
import jakarta.validation.constraints.PositiveOrZero;

public class CreateOrderRequest {
    @PositiveOrZero(message = "discount cannot be negative")
    private String customerNumber;

    public String customerNumber() {
        return customerNumber;
    }
}

a177: Vergangenes Datum erzwingen

Englischer technischer Begriff
Past Constraint
Annotation
@Past
Import/Package
jakarta.validation.constraints
Priorität
6/10
Einsatzort
Datumseingaben
Wichtige Parameter
message; groups; payload
Warum wichtig
Validiert zeitliche Richtung.
Typischer Fehler
Zeitzone und Clock im Test ignorieren.
Enterprise-Einordnung
Gut bei Stammdaten und Historie.
Ausgangspunkt-Code
public class CreateOrderRequest {
    private String customerNumber;

    boolean isValid() {
        return customerNumber != null;
    }
}
Ziel-Code
import jakarta.validation.constraints.Past;

public class CreateOrderRequest {
    @Past(message = "birthDate must be in the past")
    private String customerNumber;

    public String customerNumber() {
        return customerNumber;
    }
}

a178: Zukünftiges Datum erzwingen

Englischer technischer Begriff
Future Constraint
Annotation
@Future
Import/Package
jakarta.validation.constraints
Priorität
6/10
Einsatzort
Termine, Fälligkeiten
Wichtige Parameter
message; groups; payload
Warum wichtig
Verhindert sofort abgelaufene Daten.
Typischer Fehler
Serverzeit und Clientzeit verwechseln.
Enterprise-Einordnung
Wichtig für Scheduling und SLA.
Ausgangspunkt-Code
public class CreateOrderRequest {
    private String customerNumber;

    boolean isValid() {
        return customerNumber != null;
    }
}
Ziel-Code
import jakarta.validation.constraints.Future;

public class CreateOrderRequest {
    @Future(message = "dueDate must be in the future")
    private String customerNumber;

    public String customerNumber() {
        return customerNumber;
    }
}

a179: Dezimalgrenze setzen

Englischer technischer Begriff
Decimal Min Constraint
Annotation
@DecimalMin
Import/Package
jakarta.validation.constraints
Priorität
8/10
Einsatzort
BigDecimal Beträge
Wichtige Parameter
value; inclusive; message
Warum wichtig
Prüft exakte Dezimalwerte.
Typischer Fehler
Double für Geld und @Min verwenden.
Enterprise-Einordnung
Pflicht bei Payment/Billing.
Ausgangspunkt-Code
public class CreateOrderRequest {
    private String customerNumber;

    boolean isValid() {
        return customerNumber != null;
    }
}
Ziel-Code
import jakarta.validation.constraints.DecimalMin;

public class CreateOrderRequest {
    @DecimalMin(value = "0.01", inclusive = true, message = "amount too small")
    private String customerNumber;

    public String customerNumber() {
        return customerNumber;
    }
}

a180: Dezimalstellen begrenzen

Englischer technischer Begriff
Digits Constraint
Annotation
@Digits
Import/Package
jakarta.validation.constraints
Priorität
8/10
Einsatzort
Geldbeträge
Wichtige Parameter
integer; fraction; message
Warum wichtig
Erzwingt Präzision und Skalierung.
Typischer Fehler
DB numeric begrenzt, API akzeptiert aber beliebige Werte.
Enterprise-Einordnung
Wichtig für Accounting.
Ausgangspunkt-Code
public class CreateOrderRequest {
    private String customerNumber;

    boolean isValid() {
        return customerNumber != null;
    }
}
Ziel-Code
import jakarta.validation.constraints.Digits;

public class CreateOrderRequest {
    @Digits(integer = 12, fraction = 2, message = "amount scale invalid")
    private String customerNumber;

    public String customerNumber() {
        return customerNumber;
    }
}

a181: Verschachtelte Objekte validieren

Englischer technischer Begriff
Cascaded Validation
Annotation
@Valid
Import/Package
jakarta.validation
Priorität
10/10
Einsatzort
DTO-Graphen
Wichtige Parameter
keine Parameter
Warum wichtig
Validiert eingebettete Objekte/Listen.
Typischer Fehler
Nur Root DTO validieren und Zeilen ungeprüft lassen.
Enterprise-Einordnung
Pflicht bei Bestellungen mit Positionen.
Ausgangspunkt-Code
public class CreateOrderRequest {
    private String customerNumber;

    boolean isValid() {
        return customerNumber != null;
    }
}
Ziel-Code
import jakarta.validation.Valid;

public class CreateOrderRequest {
    @Valid
    private String customerNumber;

    public String customerNumber() {
        return customerNumber;
    }
}

a182: Validierungsgruppen einsetzen

Englischer technischer Begriff
Validation Groups
Annotation
@GroupSequence
Import/Package
jakarta.validation
Priorität
6/10
Einsatzort
Create/Update Workflows
Wichtige Parameter
value
Warum wichtig
Steuert Reihenfolge und Gruppe.
Typischer Fehler
Gruppen überkomplizieren und Debugbarkeit verlieren.
Enterprise-Einordnung
Nützlich für unterschiedliche Command-Regeln.
Ausgangspunkt-Code
public class CreateOrderRequest {
    private String customerNumber;

    boolean isValid() {
        return customerNumber != null;
    }
}
Ziel-Code
import jakarta.validation.GroupSequence;

public class CreateOrderRequest {
    @GroupSequence({Create.class, Checks.class})
    private String customerNumber;

    public String customerNumber() {
        return customerNumber;
    }
}

a183: AssertTrue gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Bean Validation Annotation
Annotation
@AssertTrue
Import/Package
jakarta.validation.constraints
Priorität
7/10
Einsatzort
DTO, Command oder Entity-Grenze
Wichtige Parameter
message; groups; payload
Warum wichtig
Validiert Eingaben nah an der Schnittstelle.
Typischer Fehler
Validierung mit Businessprozess verwechseln.
Enterprise-Einordnung
Wichtig fuer robuste APIs und saubere Fehlerbehandlung.
Ausgangspunkt-Code
public record CreateInvoiceRequest(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import jakarta.validation.*;
import jakarta.validation.constraints.*;
import jakarta.validation.groups.*;
import org.hibernate.validator.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;

public record CreateInvoiceRequest(
    @AssertTrue
    String invoiceNumber,
    BigDecimal grossTotal,
    LocalDate dueDate
) {}

a184: AssertFalse gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Bean Validation Annotation
Annotation
@AssertFalse
Import/Package
jakarta.validation.constraints
Priorität
7/10
Einsatzort
DTO, Command oder Entity-Grenze
Wichtige Parameter
message; groups; payload
Warum wichtig
Validiert Eingaben nah an der Schnittstelle.
Typischer Fehler
Validierung mit Businessprozess verwechseln.
Enterprise-Einordnung
Wichtig fuer robuste APIs und saubere Fehlerbehandlung.
Ausgangspunkt-Code
public record CreateInvoiceRequest(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import jakarta.validation.*;
import jakarta.validation.constraints.*;
import jakarta.validation.groups.*;
import org.hibernate.validator.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;

public record CreateInvoiceRequest(
    @AssertFalse
    String invoiceNumber,
    BigDecimal grossTotal,
    LocalDate dueDate
) {}

a185: DecimalMax gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Bean Validation Annotation
Annotation
@DecimalMax
Import/Package
jakarta.validation.constraints
Priorität
7/10
Einsatzort
DTO, Command oder Entity-Grenze
Wichtige Parameter
value; inclusive
Warum wichtig
Validiert Eingaben nah an der Schnittstelle.
Typischer Fehler
Validierung mit Businessprozess verwechseln.
Enterprise-Einordnung
Wichtig fuer robuste APIs und saubere Fehlerbehandlung.
Ausgangspunkt-Code
public record CreateInvoiceRequest(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import jakarta.validation.*;
import jakarta.validation.constraints.*;
import jakarta.validation.groups.*;
import org.hibernate.validator.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;

public record CreateInvoiceRequest(
    @DecimalMax(value = "999999.99", inclusive = true)
    String invoiceNumber,
    BigDecimal grossTotal,
    LocalDate dueDate
) {}

a186: FutureOrPresent gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Bean Validation Annotation
Annotation
@FutureOrPresent
Import/Package
jakarta.validation.constraints
Priorität
7/10
Einsatzort
DTO, Command oder Entity-Grenze
Wichtige Parameter
message; groups; payload
Warum wichtig
Validiert Eingaben nah an der Schnittstelle.
Typischer Fehler
Validierung mit Businessprozess verwechseln.
Enterprise-Einordnung
Wichtig fuer robuste APIs und saubere Fehlerbehandlung.
Ausgangspunkt-Code
public record CreateInvoiceRequest(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import jakarta.validation.*;
import jakarta.validation.constraints.*;
import jakarta.validation.groups.*;
import org.hibernate.validator.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;

public record CreateInvoiceRequest(
    @FutureOrPresent(message = "due date must not be in the past")
    String invoiceNumber,
    BigDecimal grossTotal,
    LocalDate dueDate
) {}

a187: PastOrPresent gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Bean Validation Annotation
Annotation
@PastOrPresent
Import/Package
jakarta.validation.constraints
Priorität
7/10
Einsatzort
DTO, Command oder Entity-Grenze
Wichtige Parameter
message; groups; payload
Warum wichtig
Validiert Eingaben nah an der Schnittstelle.
Typischer Fehler
Validierung mit Businessprozess verwechseln.
Enterprise-Einordnung
Wichtig fuer robuste APIs und saubere Fehlerbehandlung.
Ausgangspunkt-Code
public record CreateInvoiceRequest(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import jakarta.validation.*;
import jakarta.validation.constraints.*;
import jakarta.validation.groups.*;
import org.hibernate.validator.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;

public record CreateInvoiceRequest(
    @PastOrPresent(message = "booking date must not be in the future")
    String invoiceNumber,
    BigDecimal grossTotal,
    LocalDate dueDate
) {}

a188: Negative gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Bean Validation Annotation
Annotation
@Negative
Import/Package
jakarta.validation.constraints
Priorität
7/10
Einsatzort
DTO, Command oder Entity-Grenze
Wichtige Parameter
message; groups; payload
Warum wichtig
Validiert Eingaben nah an der Schnittstelle.
Typischer Fehler
Validierung mit Businessprozess verwechseln.
Enterprise-Einordnung
Wichtig fuer robuste APIs und saubere Fehlerbehandlung.
Ausgangspunkt-Code
public record CreateInvoiceRequest(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import jakarta.validation.*;
import jakarta.validation.constraints.*;
import jakarta.validation.groups.*;
import org.hibernate.validator.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;

public record CreateInvoiceRequest(
    @Negative(message = "credit note amount must be negative")
    String invoiceNumber,
    BigDecimal grossTotal,
    LocalDate dueDate
) {}

a189: NegativeOrZero gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Bean Validation Annotation
Annotation
@NegativeOrZero
Import/Package
jakarta.validation.constraints
Priorität
7/10
Einsatzort
DTO, Command oder Entity-Grenze
Wichtige Parameter
message; groups; payload
Warum wichtig
Validiert Eingaben nah an der Schnittstelle.
Typischer Fehler
Validierung mit Businessprozess verwechseln.
Enterprise-Einordnung
Wichtig fuer robuste APIs und saubere Fehlerbehandlung.
Ausgangspunkt-Code
public record CreateInvoiceRequest(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import jakarta.validation.*;
import jakarta.validation.constraints.*;
import jakarta.validation.groups.*;
import org.hibernate.validator.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;

public record CreateInvoiceRequest(
    @NegativeOrZero(message = "remaining correction must not be positive")
    String invoiceNumber,
    BigDecimal grossTotal,
    LocalDate dueDate
) {}

a190: Null gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Bean Validation Annotation
Annotation
@Null
Import/Package
jakarta.validation.constraints
Priorität
7/10
Einsatzort
DTO, Command oder Entity-Grenze
Wichtige Parameter
message; groups; payload
Warum wichtig
Validiert Eingaben nah an der Schnittstelle.
Typischer Fehler
Validierung mit Businessprozess verwechseln.
Enterprise-Einordnung
Wichtig fuer robuste APIs und saubere Fehlerbehandlung.
Ausgangspunkt-Code
public record CreateInvoiceRequest(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import jakarta.validation.*;
import jakarta.validation.constraints.*;
import jakarta.validation.groups.*;
import org.hibernate.validator.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;

public record CreateInvoiceRequest(
    @Null(message = "server generated id must be omitted")
    String invoiceNumber,
    BigDecimal grossTotal,
    LocalDate dueDate
) {}

a191: Constraint gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Bean Validation Annotation
Annotation
@Constraint
Import/Package
jakarta.validation
Priorität
7/10
Einsatzort
DTO, Command oder Entity-Grenze
Wichtige Parameter
validatedBy
Warum wichtig
Validiert Eingaben nah an der Schnittstelle.
Typischer Fehler
Validierung mit Businessprozess verwechseln.
Enterprise-Einordnung
Wichtig fuer robuste APIs und saubere Fehlerbehandlung.
Ausgangspunkt-Code
public record CreateInvoiceRequest(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import jakarta.validation.*;
import jakarta.validation.constraints.*;
import jakarta.validation.groups.*;
import org.hibernate.validator.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;

public record CreateInvoiceRequest(
    @Constraint(validatedBy = ValidInvoiceNumberValidator.class)
    String invoiceNumber,
    BigDecimal grossTotal,
    LocalDate dueDate
) {}

a192: ReportAsSingleViolation gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Bean Validation Annotation
Annotation
@ReportAsSingleViolation
Import/Package
jakarta.validation
Priorität
7/10
Einsatzort
DTO, Command oder Entity-Grenze
Wichtige Parameter
keine Parameter
Warum wichtig
Validiert Eingaben nah an der Schnittstelle.
Typischer Fehler
Validierung mit Businessprozess verwechseln.
Enterprise-Einordnung
Wichtig fuer robuste APIs und saubere Fehlerbehandlung.
Ausgangspunkt-Code
public record CreateInvoiceRequest(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import jakarta.validation.*;
import jakarta.validation.constraints.*;
import jakarta.validation.groups.*;
import org.hibernate.validator.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;

public record CreateInvoiceRequest(
    @ReportAsSingleViolation
    String invoiceNumber,
    BigDecimal grossTotal,
    LocalDate dueDate
) {}

a193: ConvertGroup gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Bean Validation Annotation
Annotation
@ConvertGroup
Import/Package
jakarta.validation.groups
Priorität
7/10
Einsatzort
DTO, Command oder Entity-Grenze
Wichtige Parameter
from; to
Warum wichtig
Validiert Eingaben nah an der Schnittstelle.
Typischer Fehler
Validierung mit Businessprozess verwechseln.
Enterprise-Einordnung
Wichtig fuer robuste APIs und saubere Fehlerbehandlung.
Ausgangspunkt-Code
public record CreateInvoiceRequest(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import jakarta.validation.*;
import jakarta.validation.constraints.*;
import jakarta.validation.groups.*;
import org.hibernate.validator.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;

public record CreateInvoiceRequest(
    @ConvertGroup(from = Default.class, to = PersistedInvoiceChecks.class)
    String invoiceNumber,
    BigDecimal grossTotal,
    LocalDate dueDate
) {}

a194: Length gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Bean Validation Annotation
Annotation
@Length
Import/Package
org.hibernate.validator.constraints
Priorität
7/10
Einsatzort
DTO, Command oder Entity-Grenze
Wichtige Parameter
min; max
Warum wichtig
Validiert Eingaben nah an der Schnittstelle.
Typischer Fehler
Validierung mit Businessprozess verwechseln.
Enterprise-Einordnung
Wichtig fuer robuste APIs und saubere Fehlerbehandlung.
Ausgangspunkt-Code
public record CreateInvoiceRequest(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import jakarta.validation.*;
import jakarta.validation.constraints.*;
import jakarta.validation.groups.*;
import org.hibernate.validator.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;

public record CreateInvoiceRequest(
    @Length(min = 3, max = 40)
    String invoiceNumber,
    BigDecimal grossTotal,
    LocalDate dueDate
) {}

a195: Range gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Bean Validation Annotation
Annotation
@Range
Import/Package
org.hibernate.validator.constraints
Priorität
7/10
Einsatzort
DTO, Command oder Entity-Grenze
Wichtige Parameter
min; max
Warum wichtig
Validiert Eingaben nah an der Schnittstelle.
Typischer Fehler
Validierung mit Businessprozess verwechseln.
Enterprise-Einordnung
Wichtig fuer robuste APIs und saubere Fehlerbehandlung.
Ausgangspunkt-Code
public record CreateInvoiceRequest(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import jakarta.validation.*;
import jakarta.validation.constraints.*;
import jakarta.validation.groups.*;
import org.hibernate.validator.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;

public record CreateInvoiceRequest(
    @Range(min = 1, max = 10)
    String invoiceNumber,
    BigDecimal grossTotal,
    LocalDate dueDate
) {}

a196: URL gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Bean Validation Annotation
Annotation
@URL
Import/Package
org.hibernate.validator.constraints
Priorität
7/10
Einsatzort
DTO, Command oder Entity-Grenze
Wichtige Parameter
protocol; host; port
Warum wichtig
Validiert Eingaben nah an der Schnittstelle.
Typischer Fehler
Validierung mit Businessprozess verwechseln.
Enterprise-Einordnung
Wichtig fuer robuste APIs und saubere Fehlerbehandlung.
Ausgangspunkt-Code
public record CreateInvoiceRequest(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import jakarta.validation.*;
import jakarta.validation.constraints.*;
import jakarta.validation.groups.*;
import org.hibernate.validator.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;

public record CreateInvoiceRequest(
    @URL(protocol = "https", message = "callback url must be https")
    String invoiceNumber,
    BigDecimal grossTotal,
    LocalDate dueDate
) {}

a197: UUID gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Bean Validation Annotation
Annotation
@UUID
Import/Package
org.hibernate.validator.constraints
Priorität
7/10
Einsatzort
DTO, Command oder Entity-Grenze
Wichtige Parameter
version; allowNil
Warum wichtig
Validiert Eingaben nah an der Schnittstelle.
Typischer Fehler
Validierung mit Businessprozess verwechseln.
Enterprise-Einordnung
Wichtig fuer robuste APIs und saubere Fehlerbehandlung.
Ausgangspunkt-Code
public record CreateInvoiceRequest(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import jakarta.validation.*;
import jakarta.validation.constraints.*;
import jakarta.validation.groups.*;
import org.hibernate.validator.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;

public record CreateInvoiceRequest(
    @UUID(version = 4)
    String invoiceNumber,
    BigDecimal grossTotal,
    LocalDate dueDate
) {}

a198: CreditCardNumber gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Bean Validation Annotation
Annotation
@CreditCardNumber
Import/Package
org.hibernate.validator.constraints
Priorität
7/10
Einsatzort
DTO, Command oder Entity-Grenze
Wichtige Parameter
ignoreNonDigitCharacters
Warum wichtig
Validiert Eingaben nah an der Schnittstelle.
Typischer Fehler
Validierung mit Businessprozess verwechseln.
Enterprise-Einordnung
Wichtig fuer robuste APIs und saubere Fehlerbehandlung.
Ausgangspunkt-Code
public record CreateInvoiceRequest(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import jakarta.validation.*;
import jakarta.validation.constraints.*;
import jakarta.validation.groups.*;
import org.hibernate.validator.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;

public record CreateInvoiceRequest(
    @CreditCardNumber(ignoreNonDigitCharacters = true)
    String invoiceNumber,
    BigDecimal grossTotal,
    LocalDate dueDate
) {}

a199: UniqueElements gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Bean Validation Annotation
Annotation
@UniqueElements
Import/Package
org.hibernate.validator.constraints
Priorität
7/10
Einsatzort
DTO, Command oder Entity-Grenze
Wichtige Parameter
message; groups; payload
Warum wichtig
Validiert Eingaben nah an der Schnittstelle.
Typischer Fehler
Validierung mit Businessprozess verwechseln.
Enterprise-Einordnung
Wichtig fuer robuste APIs und saubere Fehlerbehandlung.
Ausgangspunkt-Code
public record CreateInvoiceRequest(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import jakarta.validation.*;
import jakarta.validation.constraints.*;
import jakarta.validation.groups.*;
import org.hibernate.validator.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;

public record CreateInvoiceRequest(
    @UniqueElements(message = "line codes must be unique")
    String invoiceNumber,
    BigDecimal grossTotal,
    LocalDate dueDate
) {}
Jakarta REST, Servlet und JSON-B37 Einträge

a200: REST-Ressource adressieren

Englischer technischer Begriff
JAX-RS Path
Annotation
@Path
Import/Package
jakarta.ws.rs
Priorität
10/10
Einsatzort
REST Resource Klassen/Methoden
Wichtige Parameter
value
Warum wichtig
Definiert URL-Pfad.
Typischer Fehler
Pfadstrings uneinheitlich und ohne Versionierung verwenden.
Enterprise-Einordnung
Zentral für API-Design.
Ausgangspunkt-Code
public class OrderResource {
    public String handle(String path, String query) {
        return "manual-routing:" + path + query;
    }
}
Ziel-Code
import jakarta.ws.rs.Path;

@Path("/orders")
public class OrderResource {
    @jakarta.ws.rs.GET
    public String find() {
        return "order-42";
    }
}

a201: GET Methode definieren

Englischer technischer Begriff
HTTP GET Annotation
Annotation
@GET
Import/Package
jakarta.ws.rs
Priorität
9/10
Einsatzort
Lesende Endpunkte
Wichtige Parameter
keine Parameter
Warum wichtig
Mappt auf HTTP GET.
Typischer Fehler
GET mit Seiteneffekten implementieren.
Enterprise-Einordnung
Wichtig für Cachebarkeit und Semantik.
Ausgangspunkt-Code
public class OrderResource {
    public String handle(String path, String query) {
        return "manual-routing:" + path + query;
    }
}
Ziel-Code
import jakarta.ws.rs.GET;

public class OrderResource {
    @GET
    public String findOrder(String orderId) {
        return "order-" + orderId;
    }
}

a202: POST Methode definieren

Englischer technischer Begriff
HTTP POST Annotation
Annotation
@POST
Import/Package
jakarta.ws.rs
Priorität
9/10
Einsatzort
Create/Command Endpunkte
Wichtige Parameter
keine Parameter
Warum wichtig
Mappt auf HTTP POST.
Typischer Fehler
POST ohne Idempotenz-/Fehlerkonzept.
Enterprise-Einordnung
Wichtig für Command APIs.
Ausgangspunkt-Code
public class OrderResource {
    public String handle(String path, String query) {
        return "manual-routing:" + path + query;
    }
}
Ziel-Code
import jakarta.ws.rs.POST;

public class OrderResource {
    @POST
    public String findOrder(String orderId) {
        return "order-" + orderId;
    }
}

a203: PUT Methode definieren

Englischer technischer Begriff
HTTP PUT Annotation
Annotation
@PUT
Import/Package
jakarta.ws.rs
Priorität
8/10
Einsatzort
Replace/Update Endpunkte
Wichtige Parameter
keine Parameter
Warum wichtig
Mappt auf idempotentes PUT.
Typischer Fehler
PUT wie partielles PATCH benutzen.
Enterprise-Einordnung
Relevant für klare REST-Kontrakte.
Ausgangspunkt-Code
public class OrderResource {
    public String handle(String path, String query) {
        return "manual-routing:" + path + query;
    }
}
Ziel-Code
import jakarta.ws.rs.PUT;

public class OrderResource {
    @PUT
    public String findOrder(String orderId) {
        return "order-" + orderId;
    }
}

a204: DELETE Methode definieren

Englischer technischer Begriff
HTTP DELETE Annotation
Annotation
@DELETE
Import/Package
jakarta.ws.rs
Priorität
8/10
Einsatzort
Lösch-Endpunkte
Wichtige Parameter
keine Parameter
Warum wichtig
Mappt auf HTTP DELETE.
Typischer Fehler
Physisches Löschen ohne Audit/Retention prüfen.
Enterprise-Einordnung
Wichtig für Governance.
Ausgangspunkt-Code
public class OrderResource {
    public String handle(String path, String query) {
        return "manual-routing:" + path + query;
    }
}
Ziel-Code
import jakarta.ws.rs.DELETE;

public class OrderResource {
    @DELETE
    public String findOrder(String orderId) {
        return "order-" + orderId;
    }
}

a205: Response Media Type setzen

Englischer technischer Begriff
JAX-RS Produces
Annotation
@Produces
Import/Package
jakarta.ws.rs
Priorität
9/10
Einsatzort
REST Antworten
Wichtige Parameter
value
Warum wichtig
Deklariert Antwortformat.
Typischer Fehler
Content-Type dem Zufall überlassen.
Enterprise-Einordnung
Wichtig für Clients und Versionierung.
Ausgangspunkt-Code
public class OrderResource {
    public String handle(String path, String query) {
        return "manual-routing:" + path + query;
    }
}
Ziel-Code
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;

public class OrderResource {
    @Produces(MediaType.APPLICATION_JSON)
    public String findOrder(String orderId) {
        return "order-" + orderId;
    }
}

a206: Request Media Type setzen

Englischer technischer Begriff
JAX-RS Consumes
Annotation
@Consumes
Import/Package
jakarta.ws.rs
Priorität
9/10
Einsatzort
REST Requests
Wichtige Parameter
value
Warum wichtig
Deklariert erwartetes Eingabeformat.
Typischer Fehler
XML/JSON stillschweigend beides akzeptieren.
Enterprise-Einordnung
Reduziert Angriffsfläche.
Ausgangspunkt-Code
public class OrderResource {
    public String handle(String path, String query) {
        return "manual-routing:" + path + query;
    }
}
Ziel-Code
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.core.MediaType;

public class OrderResource {
    @Consumes(MediaType.APPLICATION_JSON)
    public String findOrder(String orderId) {
        return "order-" + orderId;
    }
}

a207: Pfadvariable binden

Englischer technischer Begriff
JAX-RS Path Param
Annotation
@PathParam
Import/Package
jakarta.ws.rs
Priorität
9/10
Einsatzort
Resource Methoden
Wichtige Parameter
value
Warum wichtig
Bindet URL-Teil an Parameter.
Typischer Fehler
Parametername im Pfad und Code abweichen lassen.
Enterprise-Einordnung
Essentiell bei REST Ressourcen.
Ausgangspunkt-Code
public class OrderResource {
    public String handle(String path, String query) {
        return "manual-routing:" + path + query;
    }
}
Ziel-Code
import jakarta.ws.rs.PathParam;

public class OrderResource {
    public String findOrder(@PathParam("orderId") String orderId) {
        return "order-" + orderId;
    }
}

a208: Query Parameter binden

Englischer technischer Begriff
JAX-RS Query Param
Annotation
@QueryParam
Import/Package
jakarta.ws.rs
Priorität
8/10
Einsatzort
Filter, Paging
Wichtige Parameter
value
Warum wichtig
Bindet Query String.
Typischer Fehler
Paging/Limit unvalidiert akzeptieren.
Enterprise-Einordnung
Wichtig für Suche und Listen.
Ausgangspunkt-Code
public class OrderResource {
    public String handle(String path, String query) {
        return "manual-routing:" + path + query;
    }
}
Ziel-Code
import jakarta.ws.rs.QueryParam;

public class OrderResource {
    public String findOrder(@QueryParam("status") String orderId) {
        return "order-" + orderId;
    }
}

a209: Header Parameter binden

Englischer technischer Begriff
JAX-RS Header Param
Annotation
@HeaderParam
Import/Package
jakarta.ws.rs
Priorität
7/10
Einsatzort
Tracing, Mandant
Wichtige Parameter
value
Warum wichtig
Bindet Headerwerte.
Typischer Fehler
Security-kritische Header ungeprüft vertrauen.
Enterprise-Einordnung
Nützlich für Korrelation und Gateway-Infos.
Ausgangspunkt-Code
public class OrderResource {
    public String handle(String path, String query) {
        return "manual-routing:" + path + query;
    }
}
Ziel-Code
import jakarta.ws.rs.HeaderParam;

public class OrderResource {
    public String findOrder(@HeaderParam("X-Correlation-Id") String orderId) {
        return "order-" + orderId;
    }
}

a210: Default-Wert setzen

Englischer technischer Begriff
JAX-RS Default Value
Annotation
@DefaultValue
Import/Package
jakarta.ws.rs
Priorität
6/10
Einsatzort
Paging Defaults
Wichtige Parameter
value
Warum wichtig
Setzt stabilen Default.
Typischer Fehler
Unbegrenzte Defaults zulassen.
Enterprise-Einordnung
Schützt Performance bei Listenendpunkten.
Ausgangspunkt-Code
public class OrderResource {
    public String handle(String path, String query) {
        return "manual-routing:" + path + query;
    }
}
Ziel-Code
import jakarta.ws.rs.DefaultValue;

public class OrderResource {
    public String findOrder(@DefaultValue("50") String orderId) {
        return "order-" + orderId;
    }
}

a211: Parametergraf bündeln

Englischer technischer Begriff
JAX-RS Bean Param
Annotation
@BeanParam
Import/Package
jakarta.ws.rs
Priorität
6/10
Einsatzort
Filterobjekte
Wichtige Parameter
keine Parameter
Warum wichtig
Bündelt Query/Header/Path Params.
Typischer Fehler
BeanParam ohne Validierung nutzen.
Enterprise-Einordnung
Gut bei komplexeren Suchfiltern.
Ausgangspunkt-Code
public class OrderResource {
    public String handle(String path, String query) {
        return "manual-routing:" + path + query;
    }
}
Ziel-Code
import jakarta.ws.rs.BeanParam;

public class OrderResource {
    public String findOrder(@BeanParam String orderId) {
        return "order-" + orderId;
    }
}

a212: REST Anwendungspfad setzen

Englischer technischer Begriff
JAX-RS Application Path
Annotation
@ApplicationPath
Import/Package
jakarta.ws.rs
Priorität
7/10
Einsatzort
Application Klasse
Wichtige Parameter
value
Warum wichtig
Setzt Basis-Pfad der API.
Typischer Fehler
API-Prefix in Serverkonfiguration verstecken.
Enterprise-Einordnung
Hilft bei Deployment-Transparenz.
Ausgangspunkt-Code
public class OrderResource {
    public String handle(String path, String query) {
        return "manual-routing:" + path + query;
    }
}
Ziel-Code
import jakarta.ws.rs.ApplicationPath;

@ApplicationPath("/api")
public class OrderResource {
    @jakarta.ws.rs.GET
    public String find() {
        return "order-42";
    }
}

a213: Provider registrieren

Englischer technischer Begriff
JAX-RS Provider
Annotation
@Provider
Import/Package
jakarta.ws.rs.ext
Priorität
8/10
Einsatzort
ExceptionMapper, Filter, MessageBodyReader
Wichtige Parameter
keine Parameter
Warum wichtig
Macht Erweiterung sichtbar.
Typischer Fehler
Provider-Klassen erzeugen, aber nicht registrieren.
Enterprise-Einordnung
Wichtig für Fehlerformat und Cross-Cutting.
Ausgangspunkt-Code
public class OrderResource {
    public String handle(String path, String query) {
        return "manual-routing:" + path + query;
    }
}
Ziel-Code
import jakarta.ws.rs.ext.Provider;

@Provider
public class OrderResource {
    @jakarta.ws.rs.GET
    public String find() {
        return "order-42";
    }
}

a214: Kontextobjekt injizieren

Englischer technischer Begriff
JAX-RS Context
Annotation
@Context
Import/Package
jakarta.ws.rs.core
Priorität
7/10
Einsatzort
UriInfo, SecurityContext, HttpHeaders
Wichtige Parameter
keine Parameter
Warum wichtig
Gibt Zugriff auf Requestkontext.
Typischer Fehler
Context in Singleton-State speichern.
Enterprise-Einordnung
Nützlich für Links, Auth und Header.
Ausgangspunkt-Code
public class OrderResource {
    public String handle(String path, String query) {
        return "manual-routing:" + path + query;
    }
}
Ziel-Code
import jakarta.ws.rs.core.Context;

public class OrderResource {
    public String findOrder(@Context String orderId) {
        return "order-" + orderId;
    }
}

a215: Servlet per Annotation registrieren

Englischer technischer Begriff
Servlet WebServlet
Annotation
@WebServlet
Import/Package
jakarta.servlet.annotation
Priorität
5/10
Einsatzort
Legacy Servlet Brücken
Wichtige Parameter
name; urlPatterns; loadOnStartup; asyncSupported
Warum wichtig
Registriert Servlet ohne web.xml.
Typischer Fehler
Zu viele Pfade ohne zentrale API-Struktur.
Enterprise-Einordnung
Relevant bei JSP/Servlet Modernisierung.
Ausgangspunkt-Code
public class OrderResource {
    public String handle(String path, String query) {
        return "manual-routing:" + path + query;
    }
}
Ziel-Code
import jakarta.servlet.annotation.WebServlet;

@WebServlet(name = "legacyReport", urlPatterns = "/legacy/report", asyncSupported = true)
public class OrderResource {
    @jakarta.ws.rs.GET
    public String find() {
        return "order-42";
    }
}

a216: Servlet Filter definieren

Englischer technischer Begriff
Servlet WebFilter
Annotation
@WebFilter
Import/Package
jakarta.servlet.annotation
Priorität
6/10
Einsatzort
Korrelation, Logging
Wichtige Parameter
filterName; urlPatterns; dispatcherTypes; asyncSupported
Warum wichtig
Registriert Request-Filter.
Typischer Fehler
Security im Filter statt Security-Framework neu erfinden.
Enterprise-Einordnung
Gut für Querschnittsanforderungen.
Ausgangspunkt-Code
public class OrderResource {
    public String handle(String path, String query) {
        return "manual-routing:" + path + query;
    }
}
Ziel-Code
import jakarta.servlet.annotation.WebFilter;

@WebFilter(filterName = "correlationFilter", urlPatterns = "/*")
public class OrderResource {
    @jakarta.ws.rs.GET
    public String find() {
        return "order-42";
    }
}

a217: Listener registrieren

Englischer technischer Begriff
Servlet WebListener
Annotation
@WebListener
Import/Package
jakarta.servlet.annotation
Priorität
4/10
Einsatzort
Lifecycle Events
Wichtige Parameter
keine Parameter
Warum wichtig
Registriert Servlet-Listener.
Typischer Fehler
Businesslogik in Listener verlagern.
Enterprise-Einordnung
Eher Legacy-/Infrastrukturthema.
Ausgangspunkt-Code
public class OrderResource {
    public String handle(String path, String query) {
        return "manual-routing:" + path + query;
    }
}
Ziel-Code
import jakarta.servlet.annotation.WebListener;

@WebListener
public class OrderResource {
    @jakarta.ws.rs.GET
    public String find() {
        return "order-42";
    }
}

a218: JSON-B Feldnamen setzen

Englischer technischer Begriff
JSON-B Property Name
Annotation
@JsonbProperty
Import/Package
jakarta.json.bind.annotation
Priorität
7/10
Einsatzort
JSON DTOs
Wichtige Parameter
value; nillable
Warum wichtig
Entkoppelt JSON-Namen von Java-Namen.
Typischer Fehler
Naming stillschweigend ändern und Clients brechen.
Enterprise-Einordnung
Wichtig für API-Kompatibilität.
Ausgangspunkt-Code
public class OrderResource {
    public String handle(String path, String query) {
        return "manual-routing:" + path + query;
    }
}
Ziel-Code
import jakarta.json.bind.annotation.JsonbProperty;

public class OrderResource {
    public String findOrder(@JsonbProperty(value = "customer_no", nillable = false) String orderId) {
        return "order-" + orderId;
    }
}

a219: JSON-B Feld ausschließen

Englischer technischer Begriff
JSON-B Transient Field
Annotation
@JsonbTransient
Import/Package
jakarta.json.bind.annotation
Priorität
8/10
Einsatzort
Secrets, interne Felder
Wichtige Parameter
keine Parameter
Warum wichtig
Verhindert Serialisierung.
Typischer Fehler
Passwort/Token versehentlich ausgeben.
Enterprise-Einordnung
Security-relevant an API-Grenzen.
Ausgangspunkt-Code
public class OrderResource {
    public String handle(String path, String query) {
        return "manual-routing:" + path + query;
    }
}
Ziel-Code
import jakarta.json.bind.annotation.JsonbTransient;

public class OrderResource {
    public String findOrder(@JsonbTransient String orderId) {
        return "order-" + orderId;
    }
}

a220: JSON-B Datum formatieren

Englischer technischer Begriff
JSON-B Date Format
Annotation
@JsonbDateFormat
Import/Package
jakarta.json.bind.annotation
Priorität
7/10
Einsatzort
Datum im DTO
Wichtige Parameter
value; locale
Warum wichtig
Stabilisiert Datumsformat.
Typischer Fehler
Locale/Zeitzone implizit lassen.
Enterprise-Einordnung
Wichtig für externe APIs.
Ausgangspunkt-Code
public class OrderResource {
    public String handle(String path, String query) {
        return "manual-routing:" + path + query;
    }
}
Ziel-Code
import jakarta.json.bind.annotation.JsonbDateFormat;

public class OrderResource {
    public String findOrder(@JsonbDateFormat(value = "yyyy-MM-dd") String orderId) {
        return "order-" + orderId;
    }
}

a221: JSON-B Adapter verwenden

Englischer technischer Begriff
JSON-B Type Adapter
Annotation
@JsonbTypeAdapter
Import/Package
jakarta.json.bind.annotation
Priorität
6/10
Einsatzort
Value Objects
Wichtige Parameter
value
Warum wichtig
Kapselt Sonderformatierung.
Typischer Fehler
Adapter für Fachlogik missbrauchen.
Enterprise-Einordnung
Gut bei Money, IDs und Codes.
Ausgangspunkt-Code
public class OrderResource {
    public String handle(String path, String query) {
        return "manual-routing:" + path + query;
    }
}
Ziel-Code
import jakarta.json.bind.annotation.JsonbTypeAdapter;

public class OrderResource {
    public String findOrder(@JsonbTypeAdapter(MoneyAmountAdapter.class) String orderId) {
        return "order-" + orderId;
    }
}

a222: MultipartConfig gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Servlet Annotation
Annotation
@MultipartConfig
Import/Package
jakarta.servlet.annotation
Priorität
6/10
Einsatzort
Servlet, Upload oder Security-Konfiguration
Wichtige Parameter
location; maxFileSize; maxRequestSize
Warum wichtig
Verlagert Webcontainer-Regeln aus XML in Code.
Typischer Fehler
Upload/Security ohne Limits und Rollen betreiben.
Enterprise-Einordnung
Wichtig fuer JSP/Servlet-Legacy und sichere Uploads.
Ausgangspunkt-Code
public class InvoiceUploadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) {
        response.setStatus(200);
    }
}
Ziel-Code
import jakarta.servlet.*;
import jakarta.servlet.annotation.*;
import jakarta.servlet.http.*;

@MultipartConfig(maxFileSize = 10_000_000L, maxRequestSize = 12_000_000L)
public class InvoiceUploadServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) {
        response.setStatus(HttpServletResponse.SC_ACCEPTED);
    }
}

a223: ServletSecurity gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Servlet Annotation
Annotation
@ServletSecurity
Import/Package
jakarta.servlet.annotation
Priorität
6/10
Einsatzort
Servlet, Upload oder Security-Konfiguration
Wichtige Parameter
value; httpMethodConstraints
Warum wichtig
Verlagert Webcontainer-Regeln aus XML in Code.
Typischer Fehler
Upload/Security ohne Limits und Rollen betreiben.
Enterprise-Einordnung
Wichtig fuer JSP/Servlet-Legacy und sichere Uploads.
Ausgangspunkt-Code
public class InvoiceUploadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) {
        response.setStatus(200);
    }
}
Ziel-Code
import jakarta.servlet.*;
import jakarta.servlet.annotation.*;
import jakarta.servlet.http.*;

@ServletSecurity(@HttpConstraint(rolesAllowed = {"BILLING_ADMIN"}))
public class InvoiceUploadServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) {
        response.setStatus(HttpServletResponse.SC_ACCEPTED);
    }
}

a224: HttpConstraint gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Servlet Annotation
Annotation
@HttpConstraint
Import/Package
jakarta.servlet.annotation
Priorität
6/10
Einsatzort
Servlet, Upload oder Security-Konfiguration
Wichtige Parameter
rolesAllowed; transportGuarantee
Warum wichtig
Verlagert Webcontainer-Regeln aus XML in Code.
Typischer Fehler
Upload/Security ohne Limits und Rollen betreiben.
Enterprise-Einordnung
Wichtig fuer JSP/Servlet-Legacy und sichere Uploads.
Ausgangspunkt-Code
public class InvoiceUploadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) {
        response.setStatus(200);
    }
}
Ziel-Code
import jakarta.servlet.*;
import jakarta.servlet.annotation.*;
import jakarta.servlet.http.*;

@ServletSecurity(@HttpConstraint(rolesAllowed = "AUDITOR"))
public class InvoiceUploadServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) {
        response.setStatus(HttpServletResponse.SC_ACCEPTED);
    }
}

a225: HttpMethodConstraint gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Servlet Annotation
Annotation
@HttpMethodConstraint
Import/Package
jakarta.servlet.annotation
Priorität
6/10
Einsatzort
Servlet, Upload oder Security-Konfiguration
Wichtige Parameter
value; rolesAllowed
Warum wichtig
Verlagert Webcontainer-Regeln aus XML in Code.
Typischer Fehler
Upload/Security ohne Limits und Rollen betreiben.
Enterprise-Einordnung
Wichtig fuer JSP/Servlet-Legacy und sichere Uploads.
Ausgangspunkt-Code
public class InvoiceUploadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) {
        response.setStatus(200);
    }
}
Ziel-Code
import jakarta.servlet.*;
import jakarta.servlet.annotation.*;
import jakarta.servlet.http.*;

@ServletSecurity(httpMethodConstraints = {@HttpMethodConstraint(value = "POST", rolesAllowed = "BILLING_ADMIN")})
public class InvoiceUploadServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) {
        response.setStatus(HttpServletResponse.SC_ACCEPTED);
    }
}

a226: HandlesTypes gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Servlet Annotation
Annotation
@HandlesTypes
Import/Package
jakarta.servlet.annotation
Priorität
6/10
Einsatzort
Servlet, Upload oder Security-Konfiguration
Wichtige Parameter
value
Warum wichtig
Verlagert Webcontainer-Regeln aus XML in Code.
Typischer Fehler
Upload/Security ohne Limits und Rollen betreiben.
Enterprise-Einordnung
Wichtig fuer JSP/Servlet-Legacy und sichere Uploads.
Ausgangspunkt-Code
public class InvoiceUploadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) {
        response.setStatus(200);
    }
}
Ziel-Code
import jakarta.servlet.*;
import jakarta.servlet.annotation.*;
import jakarta.servlet.http.*;

@HandlesTypes({BillingPlugin.class})
public class InvoiceUploadServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) {
        response.setStatus(HttpServletResponse.SC_ACCEPTED);
    }
}

a227: PATCH gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jakarta REST Annotation
Annotation
@PATCH
Import/Package
jakarta.ws.rs
Priorität
6/10
Einsatzort
REST Resource, Filter oder Parameter
Wichtige Parameter
keine Parameter
Warum wichtig
Spezifiziert HTTP-Vertrag und Provider-Verhalten.
Typischer Fehler
HTTP-Semantik und Parameterbindung verwechseln.
Enterprise-Einordnung
Zentral fuer REST-Modernisierung alter SOAP/Servlet-Systeme.
Ausgangspunkt-Code
public class InvoiceResource {
    public String status(String invoiceId) {
        return "status-for-" + invoiceId;
    }
}
Ziel-Code
import jakarta.ws.rs.*;
import jakarta.ws.rs.container.*;
import jakarta.ws.rs.core.*;

@Path("/invoices")
public class InvoiceResource {
    @PATCH
    @Path("/{invoiceId}")
    public String status(String value) {
        return "status-for-" + value;
    }
}

a228: HEAD gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jakarta REST Annotation
Annotation
@HEAD
Import/Package
jakarta.ws.rs
Priorität
6/10
Einsatzort
REST Resource, Filter oder Parameter
Wichtige Parameter
keine Parameter
Warum wichtig
Spezifiziert HTTP-Vertrag und Provider-Verhalten.
Typischer Fehler
HTTP-Semantik und Parameterbindung verwechseln.
Enterprise-Einordnung
Zentral fuer REST-Modernisierung alter SOAP/Servlet-Systeme.
Ausgangspunkt-Code
public class InvoiceResource {
    public String status(String invoiceId) {
        return "status-for-" + invoiceId;
    }
}
Ziel-Code
import jakarta.ws.rs.*;
import jakarta.ws.rs.container.*;
import jakarta.ws.rs.core.*;

@Path("/invoices")
public class InvoiceResource {
    @HEAD
    @Path("/{invoiceId}")
    public String status(String value) {
        return "status-for-" + value;
    }
}

a229: OPTIONS gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jakarta REST Annotation
Annotation
@OPTIONS
Import/Package
jakarta.ws.rs
Priorität
6/10
Einsatzort
REST Resource, Filter oder Parameter
Wichtige Parameter
keine Parameter
Warum wichtig
Spezifiziert HTTP-Vertrag und Provider-Verhalten.
Typischer Fehler
HTTP-Semantik und Parameterbindung verwechseln.
Enterprise-Einordnung
Zentral fuer REST-Modernisierung alter SOAP/Servlet-Systeme.
Ausgangspunkt-Code
public class InvoiceResource {
    public String status(String invoiceId) {
        return "status-for-" + invoiceId;
    }
}
Ziel-Code
import jakarta.ws.rs.*;
import jakarta.ws.rs.container.*;
import jakarta.ws.rs.core.*;

@Path("/invoices")
public class InvoiceResource {
    @OPTIONS
    @Path("/{invoiceId}")
    public String status(String value) {
        return "status-for-" + value;
    }
}

a230: FormParam gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jakarta REST Annotation
Annotation
@FormParam
Import/Package
jakarta.ws.rs
Priorität
6/10
Einsatzort
REST Resource, Filter oder Parameter
Wichtige Parameter
value
Warum wichtig
Spezifiziert HTTP-Vertrag und Provider-Verhalten.
Typischer Fehler
HTTP-Semantik und Parameterbindung verwechseln.
Enterprise-Einordnung
Zentral fuer REST-Modernisierung alter SOAP/Servlet-Systeme.
Ausgangspunkt-Code
public class InvoiceResource {
    public String status(String invoiceId) {
        return "status-for-" + invoiceId;
    }
}
Ziel-Code
import jakarta.ws.rs.*;
import jakarta.ws.rs.container.*;
import jakarta.ws.rs.core.*;

@Path("/invoices")
public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    public String status(@FormParam("customerNumber") String value) {
        return "status-for-" + value;
    }
}

a231: MatrixParam gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jakarta REST Annotation
Annotation
@MatrixParam
Import/Package
jakarta.ws.rs
Priorität
6/10
Einsatzort
REST Resource, Filter oder Parameter
Wichtige Parameter
value
Warum wichtig
Spezifiziert HTTP-Vertrag und Provider-Verhalten.
Typischer Fehler
HTTP-Semantik und Parameterbindung verwechseln.
Enterprise-Einordnung
Zentral fuer REST-Modernisierung alter SOAP/Servlet-Systeme.
Ausgangspunkt-Code
public class InvoiceResource {
    public String status(String invoiceId) {
        return "status-for-" + invoiceId;
    }
}
Ziel-Code
import jakarta.ws.rs.*;
import jakarta.ws.rs.container.*;
import jakarta.ws.rs.core.*;

@Path("/invoices")
public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    public String status(@MatrixParam("version") String value) {
        return "status-for-" + value;
    }
}

a232: Encoded gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jakarta REST Annotation
Annotation
@Encoded
Import/Package
jakarta.ws.rs
Priorität
6/10
Einsatzort
REST Resource, Filter oder Parameter
Wichtige Parameter
keine Parameter
Warum wichtig
Spezifiziert HTTP-Vertrag und Provider-Verhalten.
Typischer Fehler
HTTP-Semantik und Parameterbindung verwechseln.
Enterprise-Einordnung
Zentral fuer REST-Modernisierung alter SOAP/Servlet-Systeme.
Ausgangspunkt-Code
public class InvoiceResource {
    public String status(String invoiceId) {
        return "status-for-" + invoiceId;
    }
}
Ziel-Code
import jakarta.ws.rs.*;
import jakarta.ws.rs.container.*;
import jakarta.ws.rs.core.*;

@Path("/invoices")
public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    public String status(@Encoded @PathParam("documentName") String value) {
        return "status-for-" + value;
    }
}

a233: NameBinding gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jakarta REST Annotation
Annotation
@NameBinding
Import/Package
jakarta.ws.rs
Priorität
6/10
Einsatzort
REST Resource, Filter oder Parameter
Wichtige Parameter
keine Parameter
Warum wichtig
Spezifiziert HTTP-Vertrag und Provider-Verhalten.
Typischer Fehler
HTTP-Semantik und Parameterbindung verwechseln.
Enterprise-Einordnung
Zentral fuer REST-Modernisierung alter SOAP/Servlet-Systeme.
Ausgangspunkt-Code
public class InvoiceResource {
    public String status(String invoiceId) {
        return "status-for-" + invoiceId;
    }
}
Ziel-Code
import jakarta.ws.rs.*;
import jakarta.ws.rs.container.*;
import jakarta.ws.rs.core.*;

@Path("/invoices")
public class InvoiceResource {
    @NameBinding
    @Path("/{invoiceId}")
    public String status(String value) {
        return "status-for-" + value;
    }
}

a234: PreMatching gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jakarta REST Annotation
Annotation
@PreMatching
Import/Package
jakarta.ws.rs.container
Priorität
6/10
Einsatzort
REST Resource, Filter oder Parameter
Wichtige Parameter
keine Parameter
Warum wichtig
Spezifiziert HTTP-Vertrag und Provider-Verhalten.
Typischer Fehler
HTTP-Semantik und Parameterbindung verwechseln.
Enterprise-Einordnung
Zentral fuer REST-Modernisierung alter SOAP/Servlet-Systeme.
Ausgangspunkt-Code
public class InvoiceResource {
    public String status(String invoiceId) {
        return "status-for-" + invoiceId;
    }
}
Ziel-Code
import jakarta.ws.rs.*;
import jakarta.ws.rs.container.*;
import jakarta.ws.rs.core.*;

@Path("/invoices")
public class InvoiceResource {
    @PreMatching
    @Path("/{invoiceId}")
    public String status(String value) {
        return "status-for-" + value;
    }
}

a235: ConstrainedTo gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jakarta REST Annotation
Annotation
@ConstrainedTo
Import/Package
jakarta.ws.rs
Priorität
6/10
Einsatzort
REST Resource, Filter oder Parameter
Wichtige Parameter
value
Warum wichtig
Spezifiziert HTTP-Vertrag und Provider-Verhalten.
Typischer Fehler
HTTP-Semantik und Parameterbindung verwechseln.
Enterprise-Einordnung
Zentral fuer REST-Modernisierung alter SOAP/Servlet-Systeme.
Ausgangspunkt-Code
public class InvoiceResource {
    public String status(String invoiceId) {
        return "status-for-" + invoiceId;
    }
}
Ziel-Code
import jakarta.ws.rs.*;
import jakarta.ws.rs.container.*;
import jakarta.ws.rs.core.*;

@Path("/invoices")
public class InvoiceResource {
    @ConstrainedTo(RuntimeType.SERVER)
    @Path("/{invoiceId}")
    public String status(String value) {
        return "status-for-" + value;
    }
}

a236: Suspended gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jakarta REST Annotation
Annotation
@Suspended
Import/Package
jakarta.ws.rs.container
Priorität
6/10
Einsatzort
REST Resource, Filter oder Parameter
Wichtige Parameter
keine Parameter
Warum wichtig
Spezifiziert HTTP-Vertrag und Provider-Verhalten.
Typischer Fehler
HTTP-Semantik und Parameterbindung verwechseln.
Enterprise-Einordnung
Zentral fuer REST-Modernisierung alter SOAP/Servlet-Systeme.
Ausgangspunkt-Code
public class InvoiceResource {
    public String status(String invoiceId) {
        return "status-for-" + invoiceId;
    }
}
Ziel-Code
import jakarta.ws.rs.*;
import jakarta.ws.rs.container.*;
import jakarta.ws.rs.core.*;

@Path("/invoices")
public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    public String status(@Suspended AsyncResponse response) {
        return "status-for-" + value;
    }
}
Spring Boot, Core, Web, Data, Transaktionen und Scheduling97 Einträge

a237: Spring Boot Startklasse markieren

Englischer technischer Begriff
Spring Boot Application
Annotation
@SpringBootApplication
Import/Package
org.springframework.boot.autoconfigure
Priorität
9/10
Einsatzort
Boot App
Wichtige Parameter
scanBasePackages; exclude; proxyBeanMethods
Warum wichtig
Kombiniert Configuration, ComponentScan und AutoConfiguration.
Typischer Fehler
Startklasse im falschen Package platzieren.
Enterprise-Einordnung
Zentral für moderne Spring Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication(scanBasePackages = "com.company.billing")
public class BillingApplication {
    public String moduleName() {
        return "billing";
    }
}

a238: Komponente registrieren

Englischer technischer Begriff
Spring Component
Annotation
@Component
Import/Package
org.springframework.stereotype
Priorität
7/10
Einsatzort
generische Beans
Wichtige Parameter
value
Warum wichtig
Macht Klasse component-scan-fähig.
Typischer Fehler
Alles als Component markieren statt fachliche Stereotypen nutzen.
Enterprise-Einordnung
Basis für DI im Spring-Kontext.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.Component;

@Component("orderNumberGenerator")
public class BillingApplication {
    public String moduleName() {
        return "billing";
    }
}

a239: Fachservice markieren

Englischer technischer Begriff
Spring Service
Annotation
@Service
Import/Package
org.springframework.stereotype
Priorität
9/10
Einsatzort
Use Cases, Application Services
Wichtige Parameter
value
Warum wichtig
Drückt Service-Rolle aus.
Typischer Fehler
Transaktions- und Fachgrenzen vermischen.
Enterprise-Einordnung
Wichtig für Architekturlesbarkeit.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.Service;

@Service("invoiceService")
public class BillingApplication {
    public String moduleName() {
        return "billing";
    }
}

a240: Repository markieren

Englischer technischer Begriff
Spring Repository
Annotation
@Repository
Import/Package
org.springframework.stereotype
Priorität
9/10
Einsatzort
Persistenzadapter
Wichtige Parameter
value
Warum wichtig
Übersetzt Persistenzexceptions.
Typischer Fehler
SQL in Controller/Service verstreuen.
Enterprise-Einordnung
Basis für Persistence Boundary.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.Repository;

@Repository("orderRepositoryAdapter")
public class BillingApplication {
    public String moduleName() {
        return "billing";
    }
}

a241: MVC Controller markieren

Englischer technischer Begriff
Spring MVC Controller
Annotation
@Controller
Import/Package
org.springframework.stereotype
Priorität
6/10
Einsatzort
Server-side UI
Wichtige Parameter
value
Warum wichtig
Markiert Web Controller mit Views.
Typischer Fehler
REST und View-Controller mischen.
Enterprise-Einordnung
Relevant für JSP/Thymeleaf Migration.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.Controller;

@Controller("legacyPageController")
public class BillingApplication {
    public String moduleName() {
        return "billing";
    }
}

a242: REST Controller markieren

Englischer technischer Begriff
Spring REST Controller
Annotation
@RestController
Import/Package
org.springframework.web.bind.annotation
Priorität
10/10
Einsatzort
REST APIs
Wichtige Parameter
value
Warum wichtig
Kombiniert Controller und ResponseBody.
Typischer Fehler
Entity direkt aus Controller zurückgeben.
Enterprise-Einordnung
Zentral für REST Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.web.bind.annotation.RestController;

@RestController("orderRestController")
public class BillingApplication {
    public String moduleName() {
        return "billing";
    }
}

a243: Konfigurationsklasse definieren

Englischer technischer Begriff
Spring Configuration
Annotation
@Configuration
Import/Package
org.springframework.context.annotation
Priorität
8/10
Einsatzort
Bean-Konfiguration
Wichtige Parameter
proxyBeanMethods
Warum wichtig
Definiert Bean-Factories.
Typischer Fehler
proxyBeanMethods unnötig true lassen.
Enterprise-Einordnung
Wichtig für Boot-Performance und Struktur.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.context.annotation.Configuration;

@Configuration(proxyBeanMethods = false)
public class BillingApplication {
    public String moduleName() {
        return "billing";
    }
}

a244: Bean-Methode definieren

Englischer technischer Begriff
Spring Bean
Annotation
@Bean
Import/Package
org.springframework.context.annotation
Priorität
8/10
Einsatzort
Fremdklassen, Clients
Wichtige Parameter
name; initMethod; destroyMethod; autowireCandidate
Warum wichtig
Registriert Objekt als Bean.
Typischer Fehler
new in Services statt Bean-Konfiguration.
Enterprise-Einordnung
Factory Method Pattern im Spring-Kontext.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.context.annotation.Bean;

public class BillingService {
    @Bean(name = "billingClock")
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}

a245: Abhängigkeit injizieren

Englischer technischer Begriff
Spring Autowired
Annotation
@Autowired
Import/Package
org.springframework.beans.factory.annotation
Priorität
6/10
Einsatzort
Konstruktor-/Setter-Injektion
Wichtige Parameter
required
Warum wichtig
Verbindet Beans.
Typischer Fehler
Field Injection als Standard verwenden.
Enterprise-Einordnung
Konstruktorinjektion bevorzugen.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.beans.factory.annotation.Autowired;

public class InvoiceService {
    private final PaymentGateway gateway;

    @Autowired
    public InvoiceService(PaymentGateway gateway) {
        this.gateway = gateway;
    }
}

a246: Konfigurationswert injizieren

Englischer technischer Begriff
Spring Value
Annotation
@Value
Import/Package
org.springframework.beans.factory.annotation
Priorität
6/10
Einsatzort
kleine Konfigwerte
Wichtige Parameter
value
Warum wichtig
Bindet Property oder SpEL.
Typischer Fehler
Viele @Value statt typsicherer Properties.
Enterprise-Einordnung
Für einzelne Werte okay.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.beans.factory.annotation.Value;

public class BillingService {
    @Value("${billing.currency:EUR}")
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}

a247: Typsichere Properties binden

Englischer technischer Begriff
Spring Configuration Properties
Annotation
@ConfigurationProperties
Import/Package
org.springframework.boot.context.properties
Priorität
9/10
Einsatzort
Konfigurationsobjekte
Wichtige Parameter
prefix; ignoreInvalidFields; ignoreUnknownFields
Warum wichtig
Bündelt validierbare Konfiguration.
Typischer Fehler
Properties als Strings überall injizieren.
Enterprise-Einordnung
Pflicht bei größeren Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "billing.upload")
public class BillingApplication {
    public String moduleName() {
        return "billing";
    }
}

a248: Profilabhängige Bean aktivieren

Englischer technischer Begriff
Spring Profile
Annotation
@Profile
Import/Package
org.springframework.context.annotation
Priorität
7/10
Einsatzort
Umgebungsvarianten
Wichtige Parameter
value
Warum wichtig
Aktiviert Bean pro Profil.
Typischer Fehler
Profile für Mandanten-/Featurelogik missbrauchen.
Enterprise-Einordnung
Gut für Infrastrukturunterschiede.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.context.annotation.Profile;

@Profile("prod")
public class BillingApplication {
    public String moduleName() {
        return "billing";
    }
}

a249: Bean nach Property aktivieren

Englischer technischer Begriff
Conditional On Property
Annotation
@ConditionalOnProperty
Import/Package
org.springframework.boot.autoconfigure.condition
Priorität
8/10
Einsatzort
Feature Toggles
Wichtige Parameter
prefix; name; havingValue; matchIfMissing
Warum wichtig
Aktiviert Konfiguration kontrolliert.
Typischer Fehler
matchIfMissing unbewusst true.
Enterprise-Einordnung
Wichtig für modulare Plattformen.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;

@ConditionalOnProperty(prefix = "billing.outbox", name = "enabled", havingValue = "true")
public class BillingApplication {
    public String moduleName() {
        return "billing";
    }
}

a250: URL Mapping zentral setzen

Englischer technischer Begriff
Spring Request Mapping
Annotation
@RequestMapping
Import/Package
org.springframework.web.bind.annotation
Priorität
8/10
Einsatzort
Controller Klassen/Methoden
Wichtige Parameter
path/value; method; consumes; produces; headers; params
Warum wichtig
Definiert Pfad und Medientyp.
Typischer Fehler
Consumes/Produces weglassen.
Enterprise-Einordnung
Zentral für API-Kontrakte.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.web.bind.annotation.RequestMapping;

@RequestMapping(path = "/api/orders", produces = "application/json")
public class BillingApplication {
    public String moduleName() {
        return "billing";
    }
}

a251: GET Mapping verwenden

Englischer technischer Begriff
Spring Get Mapping
Annotation
@GetMapping
Import/Package
org.springframework.web.bind.annotation
Priorität
9/10
Einsatzort
lesende Endpunkte
Wichtige Parameter
path/value; produces; params; headers
Warum wichtig
Kurze Spezialisierung von RequestMapping.
Typischer Fehler
GET mit Mutation verbinden.
Enterprise-Einordnung
REST Semantik sichtbar machen.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.web.bind.annotation.GetMapping;

public class BillingService {
    @GetMapping(path = "/{orderId}", produces = "application/json")
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}

a252: POST Mapping verwenden

Englischer technischer Begriff
Spring Post Mapping
Annotation
@PostMapping
Import/Package
org.springframework.web.bind.annotation
Priorität
9/10
Einsatzort
Command Endpunkte
Wichtige Parameter
path/value; consumes; produces
Warum wichtig
Erzeugt/ändert Ressourcen.
Typischer Fehler
RequestBody nicht validieren.
Enterprise-Einordnung
Wichtig für Commands.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.web.bind.annotation.PostMapping;

public class BillingService {
    @PostMapping(path = "", consumes = "application/json", produces = "application/json")
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}

a253: Pfadvariable binden

Englischer technischer Begriff
Spring Path Variable
Annotation
@PathVariable
Import/Package
org.springframework.web.bind.annotation
Priorität
9/10
Einsatzort
Controller Parameter
Wichtige Parameter
name/value; required
Warum wichtig
Bindet URL Segment.
Typischer Fehler
String ID ungeprüft ins Repository geben.
Enterprise-Einordnung
Mit Value Objects/Validation kombinieren.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.web.bind.annotation.PathVariable;

public class OrderController {
    public String find(@PathVariable("orderId") String orderId) {
        return "order-" + orderId;
    }
}

a254: Query Parameter binden

Englischer technischer Begriff
Spring Request Param
Annotation
@RequestParam
Import/Package
org.springframework.web.bind.annotation
Priorität
8/10
Einsatzort
Paging/Filter
Wichtige Parameter
name/value; required; defaultValue
Warum wichtig
Bindet Query Parameter.
Typischer Fehler
Default page size unbegrenzt.
Enterprise-Einordnung
API-Stabilität und Schutz.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.web.bind.annotation.RequestParam;

public class OrderController {
    public String find(@RequestParam(name = "page", defaultValue = "0") String orderId) {
        return "order-" + orderId;
    }
}

a255: Request Body lesen

Englischer technischer Begriff
Spring Request Body
Annotation
@RequestBody
Import/Package
org.springframework.web.bind.annotation
Priorität
10/10
Einsatzort
JSON Commands
Wichtige Parameter
required
Warum wichtig
Bindet HTTP Body an DTO.
Typischer Fehler
Entity statt DTO verwenden.
Enterprise-Einordnung
Zentrale API-Grenze.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.web.bind.annotation.RequestBody;

public class OrderController {
    public String find(@RequestBody(required = true) String orderId) {
        return "order-" + orderId;
    }
}

a256: HTTP Status setzen

Englischer technischer Begriff
Spring Response Status
Annotation
@ResponseStatus
Import/Package
org.springframework.web.bind.annotation
Priorität
7/10
Einsatzort
Controller Methoden/Exceptions
Wichtige Parameter
code; reason; value
Warum wichtig
Setzt Status deklarativ.
Typischer Fehler
Immer 200 zurückgeben.
Enterprise-Einordnung
Wichtig für Clients.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.http.HttpStatus;

public class BillingService {
    @ResponseStatus(code = HttpStatus.CREATED)
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}

a257: Exception lokal behandeln

Englischer technischer Begriff
Spring Exception Handler
Annotation
@ExceptionHandler
Import/Package
org.springframework.web.bind.annotation
Priorität
8/10
Einsatzort
Controller Fehlerbehandlung
Wichtige Parameter
value
Warum wichtig
Mappt Exceptions auf Antwort.
Typischer Fehler
Stacktrace an Client leaken.
Enterprise-Einordnung
Teil einer Fehlerstandardisierung.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.web.bind.annotation.ExceptionHandler;

@ControllerAdvice
public class ApiErrorHandler {
    @ExceptionHandler(OrderNotFoundException.class)
    public String handle(IllegalArgumentException ex) {
        return "invalid-request:" + ex.getMessage();
    }
}

a258: Globale Controller Advice definieren

Englischer technischer Begriff
Spring Controller Advice
Annotation
@ControllerAdvice
Import/Package
org.springframework.web.bind.annotation
Priorität
9/10
Einsatzort
globale API Fehler
Wichtige Parameter
basePackages; assignableTypes; annotations
Warum wichtig
Bündelt Querschnittslogik für Controller.
Typischer Fehler
Zu breite Advice mit unerwarteten Nebenwirkungen.
Enterprise-Einordnung
Wichtig für einheitliche Fehlerformate.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.web.bind.annotation.ControllerAdvice;

@ControllerAdvice(basePackages = "com.company.billing.api")
public class ApiErrorHandler {
    @ExceptionHandler(IllegalArgumentException.class)
    public String handle(IllegalArgumentException ex) {
        return "invalid-request:" + ex.getMessage();
    }
}

a259: Spring Transaktion setzen

Englischer technischer Begriff
Spring Transactional Boundary
Annotation
@Transactional
Import/Package
org.springframework.transaction.annotation
Priorität
10/10
Einsatzort
Services/Repositories
Wichtige Parameter
propagation; isolation; readOnly; timeout; rollbackFor; noRollbackFor
Warum wichtig
Definiert Transaktionsgrenze.
Typischer Fehler
Self Invocation ignoriert Proxy.
Enterprise-Einordnung
Kernannotation in Spring Enterprise.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.transaction.annotation.Transactional;

public class BillingService {
    @Transactional(readOnly = true, timeout = 5)
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}

a260: Asynchrone Methode aktivieren

Englischer technischer Begriff
Spring Async Method
Annotation
@Async
Import/Package
org.springframework.scheduling.annotation
Priorität
7/10
Einsatzort
langsame Nebenläufe
Wichtige Parameter
value
Warum wichtig
Nutzt benannten Executor.
Typischer Fehler
Async ohne Executor-/Fehlerstrategie.
Enterprise-Einordnung
Nützlich, aber Queue/Backpressure beachten.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.scheduling.annotation.Async;

public class BillingService {
    @Async("billingExecutor")
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}

a261: Scheduler Methode definieren

Englischer technischer Begriff
Spring Scheduled Method
Annotation
@Scheduled
Import/Package
org.springframework.scheduling.annotation
Priorität
8/10
Einsatzort
regelmäßige Jobs
Wichtige Parameter
cron; fixedDelay; fixedRate; initialDelay; zone
Warum wichtig
Deklariert Zeitplan.
Typischer Fehler
Cluster ohne Locking und Idempotenz.
Enterprise-Einordnung
Wichtig bei Batchjobs.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.scheduling.annotation.Scheduled;

public class BillingService {
    @Scheduled(cron = "0 15 2 * * *", zone = "Europe/Vienna")
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}

a262: Caching für Leseoperation setzen

Englischer technischer Begriff
Spring Cacheable
Annotation
@Cacheable
Import/Package
org.springframework.cache.annotation
Priorität
7/10
Einsatzort
Referenzdaten
Wichtige Parameter
cacheNames/value; key; condition; unless; sync
Warum wichtig
Vermeidet teure Lesezugriffe.
Typischer Fehler
Mutable Objekte ungeprüft cachen.
Enterprise-Einordnung
Mit Invalidierung und Metriken planen.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.cache.annotation.Cacheable;

public class BillingService {
    @Cacheable(cacheNames = "customers", key = "#customerId", unless = "#result == null")
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}

a263: Cache gezielt leeren

Englischer technischer Begriff
Spring Cache Evict
Annotation
@CacheEvict
Import/Package
org.springframework.cache.annotation
Priorität
7/10
Einsatzort
Write-Use-Cases
Wichtige Parameter
cacheNames/value; key; allEntries; beforeInvocation
Warum wichtig
Entfernt stale Daten.
Typischer Fehler
Cacheable ohne Evict.
Enterprise-Einordnung
Wichtig für Konsistenz.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.cache.annotation.CacheEvict;

public class BillingService {
    @CacheEvict(cacheNames = "customers", key = "#customerId")
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}

a264: Validierung am Controller aktivieren

Englischer technischer Begriff
Spring Validated
Annotation
@Validated
Import/Package
org.springframework.validation.annotation
Priorität
8/10
Einsatzort
Controller/Service Validation
Wichtige Parameter
value
Warum wichtig
Aktiviert Method Validation und Gruppen.
Typischer Fehler
@Valid nur am DTO, aber Serviceparameter ungeprüft.
Enterprise-Einordnung
Gut für API- und Servicegrenzen.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.validation.annotation.Validated;

@Validated
public class BillingApplication {
    public String moduleName() {
        return "billing";
    }
}

a265: Scheduling einschalten

Englischer technischer Begriff
Enable Scheduling
Annotation
@EnableScheduling
Import/Package
org.springframework.scheduling.annotation
Priorität
6/10
Einsatzort
Konfigurationsklasse
Wichtige Parameter
keine Parameter
Warum wichtig
Aktiviert @Scheduled.
Typischer Fehler
Annotation vergessen und Jobs starten nie.
Enterprise-Einordnung
In Plattform-Bootstrap sichtbar machen.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.scheduling.annotation.EnableScheduling;

@EnableScheduling
public class BillingApplication {
    public String moduleName() {
        return "billing";
    }
}

a266: Async einschalten

Englischer technischer Begriff
Enable Async
Annotation
@EnableAsync
Import/Package
org.springframework.scheduling.annotation
Priorität
6/10
Einsatzort
Konfigurationsklasse
Wichtige Parameter
mode; proxyTargetClass; order
Warum wichtig
Aktiviert @Async.
Typischer Fehler
Self Invocation und Proxy-Grenzen ignorieren.
Enterprise-Einordnung
Mit Executor-Konfiguration kombinieren.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.scheduling.annotation.EnableAsync;

@EnableAsync
public class BillingApplication {
    public String moduleName() {
        return "billing";
    }
}

a267: Repository Query definieren

Englischer technischer Begriff
Spring Data Query
Annotation
@Query
Import/Package
org.springframework.data.jpa.repository
Priorität
8/10
Einsatzort
Spring Data Repositories
Wichtige Parameter
value; nativeQuery; countQuery; name
Warum wichtig
Macht Query explizit.
Typischer Fehler
Native Query ohne Portabilitätsgrund.
Enterprise-Einordnung
Wichtig für komplexe Reads.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.data.jpa.repository.Query;

public class BillingService {
    @Query(value = "select o from OrderEntity o where o.status = :status")
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}

a268: Modifizierende Query markieren

Englischer technischer Begriff
Spring Data Modifying
Annotation
@Modifying
Import/Package
org.springframework.data.jpa.repository
Priorität
7/10
Einsatzort
Bulk Updates
Wichtige Parameter
clearAutomatically; flushAutomatically
Warum wichtig
Kennzeichnet DML Query.
Typischer Fehler
Persistence Context nach Bulk Update stale lassen.
Enterprise-Einordnung
Wichtig bei Massenjobs.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.data.jpa.repository.Modifying;

public class BillingService {
    @Modifying(clearAutomatically = true, flushAutomatically = true)
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}

a269: EntityGraph im Repository nutzen

Englischer technischer Begriff
Spring Data Entity Graph
Annotation
@EntityGraph
Import/Package
org.springframework.data.jpa.repository
Priorität
8/10
Einsatzort
Repository Fetch Plan
Wichtige Parameter
value; attributePaths; type
Warum wichtig
Verhindert N+1 auf Use-Case-Ebene.
Typischer Fehler
Default Lazy/Eager blind lassen.
Enterprise-Einordnung
Sehr nützlich in Lesemodellen.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.data.jpa.repository.EntityGraph;

public class BillingService {
    @EntityGraph(attributePaths = {"lines", "customer"})
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}

a270: RestControllerAdvice gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@RestControllerAdvice
Import/Package
org.springframework.web.bind.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
basePackages; annotations
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @RestControllerAdvice(basePackages = "com.acme.billing.api")
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a271: RequestPart gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@RequestPart
Import/Package
org.springframework.web.bind.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
value; required
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @RequestPart("metadata")
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a272: PatchMapping gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@PatchMapping
Import/Package
org.springframework.web.bind.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
path; consumes; produces
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @PatchMapping(path = "/{invoiceId}", consumes = "application/json")
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a273: PutMapping gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@PutMapping
Import/Package
org.springframework.web.bind.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
path; consumes; produces
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @PutMapping(path = "/{invoiceId}", consumes = "application/json")
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a274: DeleteMapping gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@DeleteMapping
Import/Package
org.springframework.web.bind.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
path; produces
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @DeleteMapping(path = "/{invoiceId}")
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a275: HttpExchange gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@HttpExchange
Import/Package
org.springframework.web.service.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
url; method; accept
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @HttpExchange(url = "/partner/invoices")
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a276: GetExchange gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@GetExchange
Import/Package
org.springframework.web.service.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
url; accept
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @GetExchange("/{invoiceId}")
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a277: PostExchange gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@PostExchange
Import/Package
org.springframework.web.service.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
url; contentType
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @PostExchange
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a278: EnableCaching gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@EnableCaching
Import/Package
org.springframework.cache.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
mode; order
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service
@EnableCaching
public class BillingService {
    
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a279: CachePut gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@CachePut
Import/Package
org.springframework.cache.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
cacheNames; key; condition
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @CachePut(cacheNames = "invoiceStatus", key = "#invoiceId")
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a280: Caching gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@Caching
Import/Package
org.springframework.cache.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
cacheable; put; evict
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @Caching(evict = {@CacheEvict(cacheNames = "invoice", key = "#invoiceId")})
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a281: CacheConfig gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@CacheConfig
Import/Package
org.springframework.cache.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
cacheNames; cacheManager
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service
@CacheConfig(cacheNames = "invoice")
public class BillingService {
    
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a282: EnableTransactionManagement gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@EnableTransactionManagement
Import/Package
org.springframework.transaction.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
mode; order
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service
@EnableTransactionManagement
public class BillingService {
    
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a283: TransactionalEventListener gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@TransactionalEventListener
Import/Package
org.springframework.transaction.event
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
phase; fallbackExecution
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a284: EventListener gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@EventListener
Import/Package
org.springframework.context.event
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
classes; condition
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @EventListener(condition = "#event.tenantId != null")
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a285: EnableJpaRepositories gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@EnableJpaRepositories
Import/Package
org.springframework.data.jpa.repository.config
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
basePackages; transactionManagerRef
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service
@EnableJpaRepositories(basePackages = "com.acme.billing.persistence")
public class BillingService {
    
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a286: EntityScan gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@EntityScan
Import/Package
org.springframework.boot.autoconfigure.domain
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
basePackages
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @EntityScan(basePackages = "com.acme.billing.domain")
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a287: EnableConfigurationProperties gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@EnableConfigurationProperties
Import/Package
org.springframework.boot.context.properties
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
value
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service
@EnableConfigurationProperties(BillingProperties.class)
public class BillingService {
    
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a288: ConfigurationPropertiesScan gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@ConfigurationPropertiesScan
Import/Package
org.springframework.boot.context.properties
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
basePackages
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @ConfigurationPropertiesScan("com.acme.billing.config")
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a289: Import gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@Import
Import/Package
org.springframework.context.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
value
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @Import(BillingPersistenceConfiguration.class)
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a290: ImportResource gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@ImportResource
Import/Package
org.springframework.context.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
locations
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @ImportResource("classpath:/legacy-billing-context.xml")
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a291: PropertySource gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@PropertySource
Import/Package
org.springframework.context.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
value; encoding
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @PropertySource(value = "classpath:/billing-defaults.properties", encoding = "UTF-8")
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a292: Primary gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@Primary
Import/Package
org.springframework.context.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
keine Parameter
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service
@Primary
public class BillingService {
    
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a293: Lazy gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@Lazy
Import/Package
org.springframework.context.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
value
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service
@Lazy
public class BillingService {
    
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a294: Scope gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@Scope
Import/Package
org.springframework.context.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
scopeName; proxyMode
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service
@Scope(value = "prototype")
public class BillingService {
    
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a295: DependsOn gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@DependsOn
Import/Package
org.springframework.context.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
value
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service
@DependsOn("billingSchemaMigrator")
public class BillingService {
    
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a296: Order gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@Order
Import/Package
org.springframework.core.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
value
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service
@Order(100)
public class BillingService {
    
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a297: Conditional gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@Conditional
Import/Package
org.springframework.context.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
value
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service
@Conditional(BillingEnabledCondition.class)
public class BillingService {
    
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a298: ConditionalOnClass gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@ConditionalOnClass
Import/Package
org.springframework.boot.autoconfigure.condition
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
value; name
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service
@ConditionalOnClass(name = "org.postgresql.Driver")
public class BillingService {
    
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a299: ConditionalOnBean gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@ConditionalOnBean
Import/Package
org.springframework.boot.autoconfigure.condition
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
value; name; type
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service
@ConditionalOnBean(BillingRepository.class)
public class BillingService {
    
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a300: ConditionalOnMissingBean gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@ConditionalOnMissingBean
Import/Package
org.springframework.boot.autoconfigure.condition
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
value; name; type
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service
@ConditionalOnMissingBean(BillingNumberGenerator.class)
public class BillingService {
    
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a301: ConditionalOnExpression gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@ConditionalOnExpression
Import/Package
org.springframework.boot.autoconfigure.condition
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
value
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service
@ConditionalOnExpression("${billing.jobs.enabled:true}")
public class BillingService {
    
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a302: ConditionalOnWebApplication gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@ConditionalOnWebApplication
Import/Package
org.springframework.boot.autoconfigure.condition
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
type
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
public class BillingService {
    
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a303: ConditionalOnNotWebApplication gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@ConditionalOnNotWebApplication
Import/Package
org.springframework.boot.autoconfigure.condition
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
keine Parameter
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service
@ConditionalOnNotWebApplication
public class BillingService {
    
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a304: InitBinder gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@InitBinder
Import/Package
org.springframework.web.bind.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
value
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @InitBinder
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a305: SessionAttributes gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@SessionAttributes
Import/Package
org.springframework.web.bind.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
names; types
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @SessionAttributes("invoiceDraft")
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a306: DateTimeFormat gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@DateTimeFormat
Import/Package
org.springframework.format.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
iso; pattern
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a307: NumberFormat gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@NumberFormat
Import/Package
org.springframework.format.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
style; pattern
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @NumberFormat(pattern = "#,##0.00")
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a308: RequestAttribute gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@RequestAttribute
Import/Package
org.springframework.web.bind.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
name; required
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @RequestAttribute("tenantId")
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a309: MatrixVariable gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@MatrixVariable
Import/Package
org.springframework.web.bind.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
name; pathVar
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @MatrixVariable(name = "version", pathVar = "invoiceId")
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a310: CreatedDate gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Data Annotation
Annotation
@CreatedDate
Import/Package
org.springframework.data.annotation
Priorität
6/10
Einsatzort
Entity, Dokument oder Konfiguration
Wichtige Parameter
keine Parameter
Warum wichtig
Automatisiert Auditing und Persistence-Konventionen.
Typischer Fehler
Audit-Felder manuell und inkonsistent pflegen.
Enterprise-Einordnung
Nützlich in CRUD-, DDD- und Reporting-Systemen.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @CreatedDate
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a311: LastModifiedDate gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Data Annotation
Annotation
@LastModifiedDate
Import/Package
org.springframework.data.annotation
Priorität
6/10
Einsatzort
Entity, Dokument oder Konfiguration
Wichtige Parameter
keine Parameter
Warum wichtig
Automatisiert Auditing und Persistence-Konventionen.
Typischer Fehler
Audit-Felder manuell und inkonsistent pflegen.
Enterprise-Einordnung
Nützlich in CRUD-, DDD- und Reporting-Systemen.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @LastModifiedDate
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a312: CreatedBy gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Data Annotation
Annotation
@CreatedBy
Import/Package
org.springframework.data.annotation
Priorität
6/10
Einsatzort
Entity, Dokument oder Konfiguration
Wichtige Parameter
keine Parameter
Warum wichtig
Automatisiert Auditing und Persistence-Konventionen.
Typischer Fehler
Audit-Felder manuell und inkonsistent pflegen.
Enterprise-Einordnung
Nützlich in CRUD-, DDD- und Reporting-Systemen.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @CreatedBy
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a313: LastModifiedBy gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Data Annotation
Annotation
@LastModifiedBy
Import/Package
org.springframework.data.annotation
Priorität
6/10
Einsatzort
Entity, Dokument oder Konfiguration
Wichtige Parameter
keine Parameter
Warum wichtig
Automatisiert Auditing und Persistence-Konventionen.
Typischer Fehler
Audit-Felder manuell und inkonsistent pflegen.
Enterprise-Einordnung
Nützlich in CRUD-, DDD- und Reporting-Systemen.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @LastModifiedBy
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a314: EnableJpaAuditing gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Data Annotation
Annotation
@EnableJpaAuditing
Import/Package
org.springframework.data.jpa.repository.config
Priorität
6/10
Einsatzort
Entity, Dokument oder Konfiguration
Wichtige Parameter
auditorAwareRef
Warum wichtig
Automatisiert Auditing und Persistence-Konventionen.
Typischer Fehler
Audit-Felder manuell und inkonsistent pflegen.
Enterprise-Einordnung
Nützlich in CRUD-, DDD- und Reporting-Systemen.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service
@EnableJpaAuditing(auditorAwareRef = "billingAuditorAware")
public class BillingService {
    
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a315: Retryable gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@Retryable
Import/Package
org.springframework.retry.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
retryFor; maxAttempts; backoff
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @Retryable(retryFor = java.net.SocketTimeoutException.class, maxAttempts = 3)
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a316: Recover gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@Recover
Import/Package
org.springframework.retry.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
Signatur passend zur Retry-Methode
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @Recover
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a317: FeignClient gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@FeignClient
Import/Package
org.springframework.cloud.openfeign
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
name; url; path; fallback
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @FeignClient(name = "partner-billing", url = "${partner.billing.url}")
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a318: LoadBalanced gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@LoadBalanced
Import/Package
org.springframework.cloud.client.loadbalancer
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
keine Parameter
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @LoadBalanced
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a319: RefreshScope gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@RefreshScope
Import/Package
org.springframework.cloud.context.config.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
keine Parameter
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service
@RefreshScope
public class BillingService {
    
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a320: MockitoBean gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Test Annotation
Annotation
@MockitoBean
Import/Package
org.springframework.test.context.bean.override.mockito
Priorität
6/10
Einsatzort
Slice-, Integration- oder Security-Test
Wichtige Parameter
types; name; reset
Warum wichtig
Lädt passende Testkontexte und isoliert Infrastruktur.
Typischer Fehler
Zu viele Mocks oder falsche Testdatenbank nutzen.
Enterprise-Einordnung
Wichtig fuer schnelle CI und realistische Integrationstests.
Ausgangspunkt-Code
class InvoiceServiceTest {
    void postsInvoice() {
        // test logic is executed by the test framework
    }
}
Ziel-Code
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.springframework.test.context.*;
import org.springframework.boot.test.autoconfigure.web.servlet.*;
import com.tngtech.archunit.junit.*;

@MockitoBean
class InvoiceServiceTest {
    @Test
    
    void postsInvoice() {
        Assertions.assertTrue(true);
    }
}

a321: MockitoSpyBean gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Test Annotation
Annotation
@MockitoSpyBean
Import/Package
org.springframework.test.context.bean.override.mockito
Priorität
6/10
Einsatzort
Slice-, Integration- oder Security-Test
Wichtige Parameter
types; name; reset
Warum wichtig
Lädt passende Testkontexte und isoliert Infrastruktur.
Typischer Fehler
Zu viele Mocks oder falsche Testdatenbank nutzen.
Enterprise-Einordnung
Wichtig fuer schnelle CI und realistische Integrationstests.
Ausgangspunkt-Code
class InvoiceServiceTest {
    void postsInvoice() {
        // test logic is executed by the test framework
    }
}
Ziel-Code
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.springframework.test.context.*;
import org.springframework.boot.test.autoconfigure.web.servlet.*;
import com.tngtech.archunit.junit.*;

@MockitoSpyBean
class InvoiceServiceTest {
    @Test
    
    void postsInvoice() {
        Assertions.assertTrue(true);
    }
}

a322: AutoConfigureMockMvc gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Test Annotation
Annotation
@AutoConfigureMockMvc
Import/Package
org.springframework.boot.test.autoconfigure.web.servlet
Priorität
6/10
Einsatzort
Slice-, Integration- oder Security-Test
Wichtige Parameter
addFilters; print
Warum wichtig
Lädt passende Testkontexte und isoliert Infrastruktur.
Typischer Fehler
Zu viele Mocks oder falsche Testdatenbank nutzen.
Enterprise-Einordnung
Wichtig fuer schnelle CI und realistische Integrationstests.
Ausgangspunkt-Code
class InvoiceServiceTest {
    void postsInvoice() {
        // test logic is executed by the test framework
    }
}
Ziel-Code
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.springframework.test.context.*;
import org.springframework.boot.test.autoconfigure.web.servlet.*;
import com.tngtech.archunit.junit.*;

@AutoConfigureMockMvc(addFilters = true)
class InvoiceServiceTest {
    @Test
    
    void postsInvoice() {
        Assertions.assertTrue(true);
    }
}

a323: AutoConfigureTestDatabase gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Test Annotation
Annotation
@AutoConfigureTestDatabase
Import/Package
org.springframework.boot.test.autoconfigure.jdbc
Priorität
6/10
Einsatzort
Slice-, Integration- oder Security-Test
Wichtige Parameter
replace; connection
Warum wichtig
Lädt passende Testkontexte und isoliert Infrastruktur.
Typischer Fehler
Zu viele Mocks oder falsche Testdatenbank nutzen.
Enterprise-Einordnung
Wichtig fuer schnelle CI und realistische Integrationstests.
Ausgangspunkt-Code
class InvoiceServiceTest {
    void postsInvoice() {
        // test logic is executed by the test framework
    }
}
Ziel-Code
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.springframework.test.context.*;
import org.springframework.boot.test.autoconfigure.web.servlet.*;
import com.tngtech.archunit.junit.*;

@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
class InvoiceServiceTest {
    @Test
    
    void postsInvoice() {
        Assertions.assertTrue(true);
    }
}

a324: DataJdbcTest gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Test Annotation
Annotation
@DataJdbcTest
Import/Package
org.springframework.boot.test.autoconfigure.data.jdbc
Priorität
6/10
Einsatzort
Slice-, Integration- oder Security-Test
Wichtige Parameter
properties; includeFilters
Warum wichtig
Lädt passende Testkontexte und isoliert Infrastruktur.
Typischer Fehler
Zu viele Mocks oder falsche Testdatenbank nutzen.
Enterprise-Einordnung
Wichtig fuer schnelle CI und realistische Integrationstests.
Ausgangspunkt-Code
class InvoiceServiceTest {
    void postsInvoice() {
        // test logic is executed by the test framework
    }
}
Ziel-Code
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.springframework.test.context.*;
import org.springframework.boot.test.autoconfigure.web.servlet.*;
import com.tngtech.archunit.junit.*;

@DataJdbcTest
class InvoiceServiceTest {
    @Test
    
    void postsInvoice() {
        Assertions.assertTrue(true);
    }
}

a325: JdbcTest gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Test Annotation
Annotation
@JdbcTest
Import/Package
org.springframework.boot.test.autoconfigure.jdbc
Priorität
6/10
Einsatzort
Slice-, Integration- oder Security-Test
Wichtige Parameter
properties
Warum wichtig
Lädt passende Testkontexte und isoliert Infrastruktur.
Typischer Fehler
Zu viele Mocks oder falsche Testdatenbank nutzen.
Enterprise-Einordnung
Wichtig fuer schnelle CI und realistische Integrationstests.
Ausgangspunkt-Code
class InvoiceServiceTest {
    void postsInvoice() {
        // test logic is executed by the test framework
    }
}
Ziel-Code
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.springframework.test.context.*;
import org.springframework.boot.test.autoconfigure.web.servlet.*;
import com.tngtech.archunit.junit.*;

@JdbcTest
class InvoiceServiceTest {
    @Test
    
    void postsInvoice() {
        Assertions.assertTrue(true);
    }
}

a326: JsonTest gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Test Annotation
Annotation
@JsonTest
Import/Package
org.springframework.boot.test.autoconfigure.json
Priorität
6/10
Einsatzort
Slice-, Integration- oder Security-Test
Wichtige Parameter
properties
Warum wichtig
Lädt passende Testkontexte und isoliert Infrastruktur.
Typischer Fehler
Zu viele Mocks oder falsche Testdatenbank nutzen.
Enterprise-Einordnung
Wichtig fuer schnelle CI und realistische Integrationstests.
Ausgangspunkt-Code
class InvoiceServiceTest {
    void postsInvoice() {
        // test logic is executed by the test framework
    }
}
Ziel-Code
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.springframework.test.context.*;
import org.springframework.boot.test.autoconfigure.web.servlet.*;
import com.tngtech.archunit.junit.*;

@JsonTest
class InvoiceServiceTest {
    @Test
    
    void postsInvoice() {
        Assertions.assertTrue(true);
    }
}

a327: RestClientTest gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Test Annotation
Annotation
@RestClientTest
Import/Package
org.springframework.boot.test.autoconfigure.web.client
Priorität
6/10
Einsatzort
Slice-, Integration- oder Security-Test
Wichtige Parameter
value; components
Warum wichtig
Lädt passende Testkontexte und isoliert Infrastruktur.
Typischer Fehler
Zu viele Mocks oder falsche Testdatenbank nutzen.
Enterprise-Einordnung
Wichtig fuer schnelle CI und realistische Integrationstests.
Ausgangspunkt-Code
class InvoiceServiceTest {
    void postsInvoice() {
        // test logic is executed by the test framework
    }
}
Ziel-Code
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.springframework.test.context.*;
import org.springframework.boot.test.autoconfigure.web.servlet.*;
import com.tngtech.archunit.junit.*;

@RestClientTest(PartnerBillingClient.class)
class InvoiceServiceTest {
    @Test
    
    void postsInvoice() {
        Assertions.assertTrue(true);
    }
}

a328: WebFluxTest gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Test Annotation
Annotation
@WebFluxTest
Import/Package
org.springframework.boot.test.autoconfigure.web.reactive
Priorität
6/10
Einsatzort
Slice-, Integration- oder Security-Test
Wichtige Parameter
controllers; properties
Warum wichtig
Lädt passende Testkontexte und isoliert Infrastruktur.
Typischer Fehler
Zu viele Mocks oder falsche Testdatenbank nutzen.
Enterprise-Einordnung
Wichtig fuer schnelle CI und realistische Integrationstests.
Ausgangspunkt-Code
class InvoiceServiceTest {
    void postsInvoice() {
        // test logic is executed by the test framework
    }
}
Ziel-Code
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.springframework.test.context.*;
import org.springframework.boot.test.autoconfigure.web.servlet.*;
import com.tngtech.archunit.junit.*;

@WebFluxTest(InvoiceReactiveController.class)
class InvoiceServiceTest {
    @Test
    
    void postsInvoice() {
        Assertions.assertTrue(true);
    }
}

a329: TestPropertySource gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Test Annotation
Annotation
@TestPropertySource
Import/Package
org.springframework.test.context
Priorität
6/10
Einsatzort
Slice-, Integration- oder Security-Test
Wichtige Parameter
locations; properties
Warum wichtig
Lädt passende Testkontexte und isoliert Infrastruktur.
Typischer Fehler
Zu viele Mocks oder falsche Testdatenbank nutzen.
Enterprise-Einordnung
Wichtig fuer schnelle CI und realistische Integrationstests.
Ausgangspunkt-Code
class InvoiceServiceTest {
    void postsInvoice() {
        // test logic is executed by the test framework
    }
}
Ziel-Code
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.springframework.test.context.*;
import org.springframework.boot.test.autoconfigure.web.servlet.*;
import com.tngtech.archunit.junit.*;

@TestPropertySource(properties = "billing.partner.enabled=false")
class InvoiceServiceTest {
    @Test
    
    void postsInvoice() {
        Assertions.assertTrue(true);
    }
}

a330: ActiveProfiles gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Test Annotation
Annotation
@ActiveProfiles
Import/Package
org.springframework.test.context
Priorität
6/10
Einsatzort
Slice-, Integration- oder Security-Test
Wichtige Parameter
profiles; resolver
Warum wichtig
Lädt passende Testkontexte und isoliert Infrastruktur.
Typischer Fehler
Zu viele Mocks oder falsche Testdatenbank nutzen.
Enterprise-Einordnung
Wichtig fuer schnelle CI und realistische Integrationstests.
Ausgangspunkt-Code
class InvoiceServiceTest {
    void postsInvoice() {
        // test logic is executed by the test framework
    }
}
Ziel-Code
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.springframework.test.context.*;
import org.springframework.boot.test.autoconfigure.web.servlet.*;
import com.tngtech.archunit.junit.*;

@ActiveProfiles("test")
class InvoiceServiceTest {
    @Test
    
    void postsInvoice() {
        Assertions.assertTrue(true);
    }
}

a331: DirtiesContext gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Test Annotation
Annotation
@DirtiesContext
Import/Package
org.springframework.test.annotation
Priorität
6/10
Einsatzort
Slice-, Integration- oder Security-Test
Wichtige Parameter
classMode; methodMode
Warum wichtig
Lädt passende Testkontexte und isoliert Infrastruktur.
Typischer Fehler
Zu viele Mocks oder falsche Testdatenbank nutzen.
Enterprise-Einordnung
Wichtig fuer schnelle CI und realistische Integrationstests.
Ausgangspunkt-Code
class InvoiceServiceTest {
    void postsInvoice() {
        // test logic is executed by the test framework
    }
}
Ziel-Code
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.springframework.test.context.*;
import org.springframework.boot.test.autoconfigure.web.servlet.*;
import com.tngtech.archunit.junit.*;

@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
class InvoiceServiceTest {
    @Test
    
    void postsInvoice() {
        Assertions.assertTrue(true);
    }
}

a332: SqlConfig gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Test Annotation
Annotation
@SqlConfig
Import/Package
org.springframework.test.context.jdbc
Priorität
6/10
Einsatzort
Slice-, Integration- oder Security-Test
Wichtige Parameter
transactionManager; dataSource; encoding
Warum wichtig
Lädt passende Testkontexte und isoliert Infrastruktur.
Typischer Fehler
Zu viele Mocks oder falsche Testdatenbank nutzen.
Enterprise-Einordnung
Wichtig fuer schnelle CI und realistische Integrationstests.
Ausgangspunkt-Code
class InvoiceServiceTest {
    void postsInvoice() {
        // test logic is executed by the test framework
    }
}
Ziel-Code
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.springframework.test.context.*;
import org.springframework.boot.test.autoconfigure.web.servlet.*;
import com.tngtech.archunit.junit.*;

@SqlConfig(encoding = "UTF-8", separator = ";")
class InvoiceServiceTest {
    @Test
    
    void postsInvoice() {
        Assertions.assertTrue(true);
    }
}

a333: SqlGroup gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Test Annotation
Annotation
@SqlGroup
Import/Package
org.springframework.test.context.jdbc
Priorität
6/10
Einsatzort
Slice-, Integration- oder Security-Test
Wichtige Parameter
value
Warum wichtig
Lädt passende Testkontexte und isoliert Infrastruktur.
Typischer Fehler
Zu viele Mocks oder falsche Testdatenbank nutzen.
Enterprise-Einordnung
Wichtig fuer schnelle CI und realistische Integrationstests.
Ausgangspunkt-Code
class InvoiceServiceTest {
    void postsInvoice() {
        // test logic is executed by the test framework
    }
}
Ziel-Code
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.springframework.test.context.*;
import org.springframework.boot.test.autoconfigure.web.servlet.*;
import com.tngtech.archunit.junit.*;

@SqlGroup({@Sql("/sql/invoice-test-data.sql"), @Sql(scripts = "/sql/cleanup.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)})
class InvoiceServiceTest {
    @Test
    
    void postsInvoice() {
        Assertions.assertTrue(true);
    }
}
Spring Security14 Einträge

a334: Methodenzugriff per Ausdruck sichern

Englischer technischer Begriff
Spring PreAuthorize
Annotation
@PreAuthorize
Import/Package
org.springframework.security.access.prepost
Priorität
10/10
Einsatzort
Service/Controller Methoden
Wichtige Parameter
value
Warum wichtig
Prüft Rechte vor Ausführung.
Typischer Fehler
Nur im Frontend Rollen ausblenden.
Enterprise-Einordnung
Zentrale Defense-in-Depth Annotation.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.security.access.prepost.PreAuthorize;

public class BillingService {
    @PreAuthorize("hasRole('BILLING_ADMIN') and #customerId == authentication.name")
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}

a335: Ergebnis nachträglich prüfen

Englischer technischer Begriff
Spring PostAuthorize
Annotation
@PostAuthorize
Import/Package
org.springframework.security.access.prepost
Priorität
6/10
Einsatzort
Objektbezogene Sicherheit
Wichtige Parameter
value
Warum wichtig
Prüft Rückgabewert.
Typischer Fehler
Große Daten erst laden und dann verwerfen.
Enterprise-Einordnung
Nur für kleine gezielte Reads nutzen.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.security.access.prepost.PostAuthorize;

public class BillingService {
    @PostAuthorize("returnObject.owner == authentication.name")
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}

a336: Rollen klassisch setzen

Englischer technischer Begriff
Spring Secured
Annotation
@Secured
Import/Package
org.springframework.security.access.annotation
Priorität
7/10
Einsatzort
Method Security
Wichtige Parameter
value
Warum wichtig
Einfache Rollenprüfung.
Typischer Fehler
ROLE_ Präfix uneinheitlich verwenden.
Enterprise-Einordnung
Gut für einfache Legacy-Migration.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.security.access.annotation.Secured;

public class BillingService {
    @Secured({"ROLE_AUDITOR"})
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}

a337: Principal in Controller binden

Englischer technischer Begriff
Authentication Principal
Annotation
@AuthenticationPrincipal
Import/Package
org.springframework.security.core.annotation
Priorität
8/10
Einsatzort
Controller Parameter
Wichtige Parameter
expression; errorOnInvalidType
Warum wichtig
Bindet aktuellen Benutzer.
Typischer Fehler
Principal in ThreadLocal manuell lesen.
Enterprise-Einordnung
Saubere API-Grenze für Benutzerkontext.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.security.core.annotation.AuthenticationPrincipal;

public class OrderController {
    public String find(@AuthenticationPrincipal(expression = "username") String orderId) {
        return "order-" + orderId;
    }
}

a338: Testbenutzer für Security Test setzen

Englischer technischer Begriff
Spring Security With Mock User
Annotation
@WithMockUser
Import/Package
org.springframework.security.test.context.support
Priorität
7/10
Einsatzort
Security Tests
Wichtige Parameter
username; roles; authorities; password
Warum wichtig
Erzeugt SecurityContext im Test.
Typischer Fehler
Security Tests ohne Rollenunterschiede.
Enterprise-Einordnung
Wichtig für Controller-/Method-Security Tests.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.security.test.context.support.WithMockUser;

public class BillingService {
    @WithMockUser(username = "billing-admin", roles = {"BILLING_ADMIN"})
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}

a339: Anonymer Security Test

Englischer technischer Begriff
Spring Security With Anonymous User
Annotation
@WithAnonymousUser
Import/Package
org.springframework.security.test.context.support
Priorität
5/10
Einsatzort
Security Tests
Wichtige Parameter
keine Parameter
Warum wichtig
Simuliert nicht authentifizierten Benutzer.
Typischer Fehler
Nur Happy Path mit Admin testen.
Enterprise-Einordnung
Prüft Public/Protected Boundary.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.security.test.context.support.WithAnonymousUser;

public class BillingService {
    @WithAnonymousUser
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}

a340: Benutzer aus UserDetails laden

Englischer technischer Begriff
With User Details Test
Annotation
@WithUserDetails
Import/Package
org.springframework.security.test.context.support
Priorität
5/10
Einsatzort
Integration Tests
Wichtige Parameter
value; userDetailsServiceBeanName
Warum wichtig
Lädt echten Testuser.
Typischer Fehler
Produktive UserDetailsService-Daten verwenden.
Enterprise-Einordnung
Nützlich für realistischere Security Tests.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.security.test.context.support.WithUserDetails;

public class BillingService {
    @WithUserDetails(value = "auditor", userDetailsServiceBeanName = "testUsers")
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}

a341: CSRF im MVC Test setzen

Englischer technischer Begriff
Spring Security CSRF
Annotation
@csrf
Import/Package
org.springframework.security.test.web.servlet.request
Priorität
6/10
Einsatzort
MockMvc Tests
Wichtige Parameter
asHeader; useInvalidToken
Warum wichtig
Fügt CSRF Token hinzu.
Typischer Fehler
403 Fehler durch fehlendes CSRF falsch interpretieren.
Enterprise-Einordnung
Wichtig für Web-Controller Tests.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.security.test.web.servlet.request.csrf;

public class BillingService {
    @csrf
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}

a342: EnableWebSecurity gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Security Annotation
Annotation
@EnableWebSecurity
Import/Package
org.springframework.security.config.annotation.web.configuration
Priorität
8/10
Einsatzort
Security-Konfiguration, Service oder Test
Wichtige Parameter
debug
Warum wichtig
Erzwingt Zugriffsschutz auf Web- und Service-Ebene.
Typischer Fehler
Nur UI oder Controller absichern.
Enterprise-Einordnung
Wichtig fuer Defense-in-Depth und Audits.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service
@EnableWebSecurity
public class BillingService {
    
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a343: EnableMethodSecurity gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Security Annotation
Annotation
@EnableMethodSecurity
Import/Package
org.springframework.security.config.annotation.method.configuration
Priorität
8/10
Einsatzort
Security-Konfiguration, Service oder Test
Wichtige Parameter
prePostEnabled; jsr250Enabled
Warum wichtig
Erzwingt Zugriffsschutz auf Web- und Service-Ebene.
Typischer Fehler
Nur UI oder Controller absichern.
Enterprise-Einordnung
Wichtig fuer Defense-in-Depth und Audits.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service
@EnableMethodSecurity(prePostEnabled = true, jsr250Enabled = true)
public class BillingService {
    
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a344: PreFilter gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Security Annotation
Annotation
@PreFilter
Import/Package
org.springframework.security.access.prepost
Priorität
8/10
Einsatzort
Security-Konfiguration, Service oder Test
Wichtige Parameter
value; filterTarget
Warum wichtig
Erzwingt Zugriffsschutz auf Web- und Service-Ebene.
Typischer Fehler
Nur UI oder Controller absichern.
Enterprise-Einordnung
Wichtig fuer Defense-in-Depth und Audits.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @PreFilter("filterObject.tenantId == authentication.name")
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a345: PostFilter gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Security Annotation
Annotation
@PostFilter
Import/Package
org.springframework.security.access.prepost
Priorität
8/10
Einsatzort
Security-Konfiguration, Service oder Test
Wichtige Parameter
value; filterTarget
Warum wichtig
Erzwingt Zugriffsschutz auf Web- und Service-Ebene.
Typischer Fehler
Nur UI oder Controller absichern.
Enterprise-Einordnung
Wichtig fuer Defense-in-Depth und Audits.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @PostFilter("filterObject.visibleTo(authentication.name)")
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a346: CurrentSecurityContext gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Security Annotation
Annotation
@CurrentSecurityContext
Import/Package
org.springframework.security.core.annotation
Priorität
8/10
Einsatzort
Security-Konfiguration, Service oder Test
Wichtige Parameter
expression
Warum wichtig
Erzwingt Zugriffsschutz auf Web- und Service-Ebene.
Typischer Fehler
Nur UI oder Controller absichern.
Enterprise-Einordnung
Wichtig fuer Defense-in-Depth und Audits.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @CurrentSecurityContext(expression = "authentication.name")
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a347: WithSecurityContext gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Security Annotation
Annotation
@WithSecurityContext
Import/Package
org.springframework.security.test.context.support
Priorität
8/10
Einsatzort
Security-Konfiguration, Service oder Test
Wichtige Parameter
factory; setupBefore
Warum wichtig
Erzwingt Zugriffsschutz auf Web- und Service-Ebene.
Typischer Fehler
Nur UI oder Controller absichern.
Enterprise-Einordnung
Wichtig fuer Defense-in-Depth und Audits.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @WithSecurityContext(factory = WithBillingUserFactory.class)
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}
MicroProfile, Quarkus, OpenAPI, Resilience und Observability54 Einträge

a348: MicroProfile Config Property injizieren

Englischer technischer Begriff
MicroProfile Config Property
Annotation
@ConfigProperty
Import/Package
org.eclipse.microprofile.config.inject
Priorität
9/10
Einsatzort
Konfiguration
Wichtige Parameter
name; defaultValue
Warum wichtig
Typsichere Konfiguration ohne direkte System Properties.
Typischer Fehler
Konfigurationsnamen duplizieren ohne zentrale Dokumentation.
Enterprise-Einordnung
Wichtig bei Cloud-native Services.
Ausgangspunkt-Code
public class PartnerGateway {
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}
Ziel-Code
import org.eclipse.microprofile.config.inject.ConfigProperty;

public class BillingClientConfig {
    @ConfigProperty(name = "billing.currency", defaultValue = "EUR")
    String currency;

    String currency() { return currency; }
}

a349: REST Client Interface registrieren

Englischer technischer Begriff
MicroProfile Register Rest Client
Annotation
@RegisterRestClient
Import/Package
org.eclipse.microprofile.rest.client.inject
Priorität
8/10
Einsatzort
Outbound HTTP Clients
Wichtige Parameter
configKey; baseUri
Warum wichtig
Registriert typsicheren REST Client.
Typischer Fehler
Base URL hart im Code.
Enterprise-Einordnung
Sehr wichtig bei Service-zu-Service-Kommunikation.
Ausgangspunkt-Code
public class PartnerGateway {
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}
Ziel-Code
import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;

@RegisterRestClient(configKey = "partner-api")
public class PartnerClientResource {
    public String health() {
        return "ready";
    }
}

a350: REST Client injizieren

Englischer technischer Begriff
MicroProfile Rest Client Injection
Annotation
@RestClient
Import/Package
org.eclipse.microprofile.rest.client.inject
Priorität
8/10
Einsatzort
Client Injection
Wichtige Parameter
keine Parameter
Warum wichtig
Injiziert registrierten REST Client.
Typischer Fehler
HTTP Client manuell überall bauen.
Enterprise-Einordnung
Erhöht Testbarkeit und Konfigurierbarkeit.
Ausgangspunkt-Code
public class PartnerGateway {
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}
Ziel-Code
import org.eclipse.microprofile.rest.client.inject.RestClient;

public class BillingClientConfig {
    @RestClient
    String currency;

    String currency() { return currency; }
}

a351: Retry definieren

Englischer technischer Begriff
MicroProfile Fault Tolerance Retry
Annotation
@Retry
Import/Package
org.eclipse.microprofile.faulttolerance
Priorität
8/10
Einsatzort
flaky Remote Calls
Wichtige Parameter
maxRetries; delay; delayUnit; retryOn; abortOn; jitter
Warum wichtig
Wiederholt gezielt transiente Fehler.
Typischer Fehler
Retry auf nicht-idempotente Zahlung ausführen.
Enterprise-Einordnung
Nur mit Idempotenz und Timeout einsetzen.
Ausgangspunkt-Code
public class PartnerGateway {
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}
Ziel-Code
import org.eclipse.microprofile.faulttolerance.Retry;
import java.time.temporal.ChronoUnit;

public class PartnerGateway {
    @Retry(maxRetries = 3, delay = 200, delayUnit = ChronoUnit.MILLIS)
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}

a352: Timeout setzen

Englischer technischer Begriff
MicroProfile Fault Tolerance Timeout
Annotation
@Timeout
Import/Package
org.eclipse.microprofile.faulttolerance
Priorität
9/10
Einsatzort
Remote Calls
Wichtige Parameter
value; unit
Warum wichtig
Begrenzt Wartezeit.
Typischer Fehler
Timeout länger als Upstream SLA.
Enterprise-Einordnung
Pflicht für stabile verteilte Systeme.
Ausgangspunkt-Code
public class PartnerGateway {
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}
Ziel-Code
import org.eclipse.microprofile.faulttolerance.Timeout;
import java.time.temporal.ChronoUnit;

public class PartnerGateway {
    @Timeout(value = 2, unit = ChronoUnit.SECONDS)
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}

a353: Circuit Breaker setzen

Englischer technischer Begriff
MicroProfile Circuit Breaker
Annotation
@CircuitBreaker
Import/Package
org.eclipse.microprofile.faulttolerance
Priorität
9/10
Einsatzort
instabile Abhängigkeiten
Wichtige Parameter
requestVolumeThreshold; failureRatio; delay; successThreshold; failOn; skipOn
Warum wichtig
Stoppt Dauerfeuer auf defekte Systeme.
Typischer Fehler
CircuitBreaker ohne Metriken und Alarme.
Enterprise-Einordnung
Wichtig für Resilience.
Ausgangspunkt-Code
public class PartnerGateway {
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}
Ziel-Code
import org.eclipse.microprofile.faulttolerance.CircuitBreaker;
import java.time.temporal.ChronoUnit;

public class PartnerGateway {
    @CircuitBreaker(requestVolumeThreshold = 20, failureRatio = 0.5, delay = 5, delayUnit = ChronoUnit.SECONDS)
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}

a354: Bulkhead begrenzen

Englischer technischer Begriff
MicroProfile Fault Tolerance Bulkhead
Annotation
@Bulkhead
Import/Package
org.eclipse.microprofile.faulttolerance
Priorität
9/10
Einsatzort
Remote/DB Kapazitäten
Wichtige Parameter
value; waitingTaskQueue
Warum wichtig
Limitiert parallele Nutzung.
Typischer Fehler
Unbegrenzte Parallelität mit Virtual Threads.
Enterprise-Einordnung
Schützt kritische Ressourcen.
Ausgangspunkt-Code
public class PartnerGateway {
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}
Ziel-Code
import org.eclipse.microprofile.faulttolerance.Bulkhead;

public class PartnerGateway {
    @Bulkhead(value = 20, waitingTaskQueue = 40)
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}

a355: Fallback definieren

Englischer technischer Begriff
MicroProfile Fault Tolerance Fallback
Annotation
@Fallback
Import/Package
org.eclipse.microprofile.faulttolerance
Priorität
7/10
Einsatzort
degradierte Antworten
Wichtige Parameter
value; fallbackMethod; applyOn; skipOn
Warum wichtig
Gibt kontrollierte Alternative.
Typischer Fehler
Fallback liefert veraltete Daten ohne Kennzeichnung.
Enterprise-Einordnung
Nützlich für Read-only Abhängigkeiten.
Ausgangspunkt-Code
public class PartnerGateway {
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}
Ziel-Code
import org.eclipse.microprofile.faulttolerance.Fallback;

public class PartnerGateway {
    @Fallback(fallbackMethod = "cachedPartnerStatus")
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}

a356: Asynchrone Fault-Tolerance Methode

Englischer technischer Begriff
MicroProfile Asynchronous
Annotation
@Asynchronous
Import/Package
org.eclipse.microprofile.faulttolerance
Priorität
6/10
Einsatzort
Async Remote Calls
Wichtige Parameter
keine Parameter
Warum wichtig
Führt Methode asynchron aus.
Typischer Fehler
Executor/Kapazität nicht beachten.
Enterprise-Einordnung
Mit Bulkhead kombinieren.
Ausgangspunkt-Code
public class PartnerGateway {
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}
Ziel-Code
import org.eclipse.microprofile.faulttolerance.Asynchronous;

public class PartnerGateway {
    @Asynchronous
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}

a357: Aufrufe zählen

Englischer technischer Begriff
MicroProfile Counted Metric
Annotation
@Counted
Import/Package
org.eclipse.microprofile.metrics.annotation
Priorität
6/10
Einsatzort
Metriken
Wichtige Parameter
name; displayName; description; absolute; tags; monotonic
Warum wichtig
Zählt fachliche/technische Ereignisse.
Typischer Fehler
Zu hohe Kardinalität in Tags.
Enterprise-Einordnung
Basis für SLA-Beobachtung.
Ausgangspunkt-Code
public class PartnerGateway {
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}
Ziel-Code
import org.eclipse.microprofile.metrics.annotation.Counted;

public class PartnerGateway {
    @Counted(name = "billing_requests_total", monotonic = true)
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}

a358: Laufzeit messen

Englischer technischer Begriff
MicroProfile Timed Metric
Annotation
@Timed
Import/Package
org.eclipse.microprofile.metrics.annotation
Priorität
7/10
Einsatzort
Metriken
Wichtige Parameter
name; description; absolute; tags
Warum wichtig
Misst Dauer und Verteilung.
Typischer Fehler
Nur Durchschnittswerte betrachten.
Enterprise-Einordnung
Wichtig für Performance SLOs.
Ausgangspunkt-Code
public class PartnerGateway {
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}
Ziel-Code
import org.eclipse.microprofile.metrics.annotation.Timed;

public class PartnerGateway {
    @Timed(name = "invoice_generation_time")
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}

a359: Gauge bereitstellen

Englischer technischer Begriff
MicroProfile Gauge Metric
Annotation
@Gauge
Import/Package
org.eclipse.microprofile.metrics.annotation
Priorität
5/10
Einsatzort
Zustandsmetriken
Wichtige Parameter
name; unit; description; absolute; tags
Warum wichtig
Liefert aktuellen Wert.
Typischer Fehler
Teure Berechnung im Gauge.
Enterprise-Einordnung
Gut für Queue-/Backlog-Sichtbarkeit.
Ausgangspunkt-Code
public class PartnerGateway {
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}
Ziel-Code
import org.eclipse.microprofile.metrics.annotation.Gauge;
import org.eclipse.microprofile.metrics.MetricUnits;

public class PartnerGateway {
    @Gauge(name = "queue_depth", unit = MetricUnits.NONE)
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}

a360: API Operation beschreiben

Englischer technischer Begriff
OpenAPI Operation
Annotation
@Operation
Import/Package
org.eclipse.microprofile.openapi.annotations
Priorität
8/10
Einsatzort
REST API Docs
Wichtige Parameter
summary; description; operationId; deprecated; hidden
Warum wichtig
Macht API fachlich verständlich.
Typischer Fehler
Automatische Doku ohne fachliche Beschreibung.
Enterprise-Einordnung
Wichtig für Consumer und Governance.
Ausgangspunkt-Code
public class PartnerGateway {
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}
Ziel-Code
import org.eclipse.microprofile.openapi.annotations.Operation;

public class PartnerGateway {
    @Operation(summary = "Create order", operationId = "createOrder")
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}

a361: API Antwort beschreiben

Englischer technischer Begriff
OpenAPI API Response
Annotation
@APIResponse
Import/Package
org.eclipse.microprofile.openapi.annotations.responses
Priorität
8/10
Einsatzort
REST API Docs
Wichtige Parameter
responseCode; description; content; headers; links
Warum wichtig
Dokumentiert Statuscodes.
Typischer Fehler
Nur 200 dokumentieren.
Enterprise-Einordnung
Wichtig für robuste Clients.
Ausgangspunkt-Code
public class PartnerGateway {
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}
Ziel-Code
import org.eclipse.microprofile.openapi.annotations.responses.APIResponse;

public class PartnerGateway {
    @APIResponse(responseCode = "201", description = "Order created")
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}

a362: API Parameter beschreiben

Englischer technischer Begriff
OpenAPI Parameter
Annotation
@Parameter
Import/Package
org.eclipse.microprofile.openapi.annotations.parameters
Priorität
6/10
Einsatzort
REST API Docs
Wichtige Parameter
name; description; required; example; schema
Warum wichtig
Beschreibt Parameter.
Typischer Fehler
Beschreibung als Kopie des Namens.
Enterprise-Einordnung
Verbessert API-Verständnis.
Ausgangspunkt-Code
public class PartnerGateway {
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}
Ziel-Code
import org.eclipse.microprofile.openapi.annotations.parameters.Parameter;

public class TraceService {
    public String lookup(@Parameter(description = "Technical order id", required = true) String customerId) {
        return "customer-" + customerId;
    }
}

a363: Schema beschreiben

Englischer technischer Begriff
OpenAPI Schema
Annotation
@Schema
Import/Package
org.eclipse.microprofile.openapi.annotations.media
Priorität
7/10
Einsatzort
DTOs
Wichtige Parameter
name; description; required; implementation; example; minimum; maximum
Warum wichtig
Beschreibt Datenmodell.
Typischer Fehler
Schema und Validation widersprechen sich.
Enterprise-Einordnung
Wichtig für Contract Reviews.
Ausgangspunkt-Code
public class PartnerGateway {
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}
Ziel-Code
import org.eclipse.microprofile.openapi.annotations.media.Schema;

@Schema(description = "Order command", required = true)
public class PartnerClientResource {
    public String health() {
        return "ready";
    }
}

a364: Quarkus Test markieren

Englischer technischer Begriff
Quarkus Test
Annotation
@QuarkusTest
Import/Package
io.quarkus.test.junit
Priorität
7/10
Einsatzort
Integration Tests
Wichtige Parameter
keine Parameter
Warum wichtig
Startet Quarkus Testumgebung.
Typischer Fehler
Alles als QuarkusTest statt kleinere Tests.
Enterprise-Einordnung
Wichtig in Quarkus-Projekten.
Ausgangspunkt-Code
public class PartnerGateway {
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}
Ziel-Code
import io.quarkus.test.junit.QuarkusTest;

@QuarkusTest
public class PartnerClientResource {
    public String health() {
        return "ready";
    }
}

a365: Quarkus Profil wählen

Englischer technischer Begriff
Quarkus Test Profile
Annotation
@TestProfile
Import/Package
io.quarkus.test.junit
Priorität
5/10
Einsatzort
Quarkus Tests
Wichtige Parameter
value
Warum wichtig
Wählt Testprofil.
Typischer Fehler
Produktionsprofil im Test verwenden.
Enterprise-Einordnung
Nützlich für Konfiguration je Testklasse.
Ausgangspunkt-Code
public class PartnerGateway {
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}
Ziel-Code
import io.quarkus.test.junit.TestProfile;

@TestProfile(BillingTestProfile.class)
public class PartnerClientResource {
    public String health() {
        return "ready";
    }
}

a366: Quarkus Mock injizieren

Englischer technischer Begriff
Quarkus Inject Mock
Annotation
@InjectMock
Import/Package
io.quarkus.test.junit.mockito
Priorität
6/10
Einsatzort
Quarkus Tests
Wichtige Parameter
convertScopes
Warum wichtig
Ersetzt Bean durch Mockito Mock.
Typischer Fehler
Mock nicht zurücksetzen und Tests koppeln.
Enterprise-Einordnung
Gut für Adapter-Isolation.
Ausgangspunkt-Code
public class PartnerGateway {
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}
Ziel-Code
import io.quarkus.test.junit.mockito.InjectMock;

public class BillingClientConfig {
    @InjectMock
    String currency;

    String currency() { return currency; }
}

a367: Register For Reflection setzen

Englischer technischer Begriff
Quarkus Reflection Registration
Annotation
@RegisterForReflection
Import/Package
io.quarkus.runtime.annotations
Priorität
7/10
Einsatzort
Native Image
Wichtige Parameter
targets; classNames; methods; fields; ignoreNested
Warum wichtig
Registriert Klassen für Reflection.
Typischer Fehler
Reflection-Fehler erst im Native Build merken.
Enterprise-Einordnung
Wichtig für GraalVM/Native Images.
Ausgangspunkt-Code
public class PartnerGateway {
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}
Ziel-Code
import io.quarkus.runtime.annotations.RegisterForReflection;

@RegisterForReflection(methods = true, fields = true)
public class PartnerClientResource {
    public String health() {
        return "ready";
    }
}

a368: Blocking Endpoint markieren

Englischer technischer Begriff
Quarkus Blocking
Annotation
@Blocking
Import/Package
io.smallrye.common.annotation
Priorität
7/10
Einsatzort
RESTEasy Reactive
Wichtige Parameter
keine Parameter
Warum wichtig
Verschiebt blockierende Arbeit vom Event Loop.
Typischer Fehler
Blockierende DB/IO-Arbeit im Event Loop.
Enterprise-Einordnung
Kritisch für reaktive Services.
Ausgangspunkt-Code
public class PartnerGateway {
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}
Ziel-Code
import io.smallrye.common.annotation.Blocking;

public class PartnerGateway {
    @Blocking
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}

a369: NonBlocking Methode markieren

Englischer technischer Begriff
Quarkus NonBlocking
Annotation
@NonBlocking
Import/Package
io.smallrye.common.annotation
Priorität
5/10
Einsatzort
reaktive Endpunkte
Wichtige Parameter
keine Parameter
Warum wichtig
Dokumentiert nicht-blockierende Ausführung.
Typischer Fehler
Doch blockierende Calls verwenden.
Enterprise-Einordnung
Hilft bei Event-Loop-Schutz.
Ausgangspunkt-Code
public class PartnerGateway {
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}
Ziel-Code
import io.smallrye.common.annotation.NonBlocking;

public class PartnerGateway {
    @NonBlocking
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}

a370: Observability Span markieren

Englischer technischer Begriff
OpenTelemetry With Span
Annotation
@WithSpan
Import/Package
io.opentelemetry.instrumentation.annotations
Priorität
7/10
Einsatzort
Tracing
Wichtige Parameter
value; kind
Warum wichtig
Erzeugt fachlichen Span.
Typischer Fehler
Jede kleine Methode als Span markieren.
Enterprise-Einordnung
Gut für Use-Case-Grenzen.
Ausgangspunkt-Code
public class PartnerGateway {
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}
Ziel-Code
import io.opentelemetry.instrumentation.annotations.WithSpan;

public class PartnerGateway {
    @WithSpan(value = "BillingService.createInvoice")
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}

a371: Span Attribut setzen

Englischer technischer Begriff
OpenTelemetry Span Attribute
Annotation
@SpanAttribute
Import/Package
io.opentelemetry.instrumentation.annotations
Priorität
6/10
Einsatzort
Tracing Parameter
Wichtige Parameter
value
Warum wichtig
Fügt Attribut zum Span hinzu.
Typischer Fehler
PII oder hohe Kardinalität taggen.
Enterprise-Einordnung
Wichtig für Diagnose mit Datenschutz.
Ausgangspunkt-Code
public class PartnerGateway {
    public String fetchStatus(String partnerId) {
        return "ACTIVE:" + partnerId;
    }
}
Ziel-Code
import io.opentelemetry.instrumentation.annotations.SpanAttribute;

public class TraceService {
    public String lookup(@SpanAttribute("customer.id") String customerId) {
        return "customer-" + customerId;
    }
}

a372: OpenAPIDefinition gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
OpenAPI Annotation
Annotation
@OpenAPIDefinition
Import/Package
org.eclipse.microprofile.openapi.annotations
Priorität
5/10
Einsatzort
API-Dokumentation und Vertrag
Wichtige Parameter
info; servers; security
Warum wichtig
Hält API-Vertrag für Clients verständlich.
Typischer Fehler
Doku und Runtime-Verhalten auseinanderlaufen lassen.
Enterprise-Einordnung
Wichtig fuer API-Governance und Partnerintegration.
Ausgangspunkt-Code
public class InvoiceResource {
    public String read(String invoiceId) { return invoiceId; }
}
Ziel-Code
import jakarta.ws.rs.*;
import org.eclipse.microprofile.openapi.annotations.*;
import org.eclipse.microprofile.openapi.annotations.info.*;
import org.eclipse.microprofile.openapi.annotations.media.*;
import org.eclipse.microprofile.openapi.annotations.responses.*;
import org.eclipse.microprofile.rest.client.inject.*;
import org.eclipse.microprofile.health.*;
import io.smallrye.config.*;
import io.quarkus.test.security.*;

@Path("/invoices")
@OpenAPIDefinition(info = @Info(title = "Billing API", version = "1.0"))
public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    
    public String read(@PathParam("invoiceId") String invoiceId) { return invoiceId; }
}

a373: Info gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
OpenAPI Annotation
Annotation
@Info
Import/Package
org.eclipse.microprofile.openapi.annotations.info
Priorität
5/10
Einsatzort
API-Dokumentation und Vertrag
Wichtige Parameter
title; version; description
Warum wichtig
Hält API-Vertrag für Clients verständlich.
Typischer Fehler
Doku und Runtime-Verhalten auseinanderlaufen lassen.
Enterprise-Einordnung
Wichtig fuer API-Governance und Partnerintegration.
Ausgangspunkt-Code
public class InvoiceResource {
    public String read(String invoiceId) { return invoiceId; }
}
Ziel-Code
import jakarta.ws.rs.*;
import org.eclipse.microprofile.openapi.annotations.*;
import org.eclipse.microprofile.openapi.annotations.info.*;
import org.eclipse.microprofile.openapi.annotations.media.*;
import org.eclipse.microprofile.openapi.annotations.responses.*;
import org.eclipse.microprofile.rest.client.inject.*;
import org.eclipse.microprofile.health.*;
import io.smallrye.config.*;
import io.quarkus.test.security.*;

@Path("/invoices")

public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    @OpenAPIDefinition(info = @Info(title = "Invoice API", version = "2026.07"))
    public String read(@PathParam("invoiceId") String invoiceId) { return invoiceId; }
}

a374: Server gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
OpenAPI Annotation
Annotation
@Server
Import/Package
org.eclipse.microprofile.openapi.annotations.servers
Priorität
5/10
Einsatzort
API-Dokumentation und Vertrag
Wichtige Parameter
url; description
Warum wichtig
Hält API-Vertrag für Clients verständlich.
Typischer Fehler
Doku und Runtime-Verhalten auseinanderlaufen lassen.
Enterprise-Einordnung
Wichtig fuer API-Governance und Partnerintegration.
Ausgangspunkt-Code
public class InvoiceResource {
    public String read(String invoiceId) { return invoiceId; }
}
Ziel-Code
import jakarta.ws.rs.*;
import org.eclipse.microprofile.openapi.annotations.*;
import org.eclipse.microprofile.openapi.annotations.info.*;
import org.eclipse.microprofile.openapi.annotations.media.*;
import org.eclipse.microprofile.openapi.annotations.responses.*;
import org.eclipse.microprofile.rest.client.inject.*;
import org.eclipse.microprofile.health.*;
import io.smallrye.config.*;
import io.quarkus.test.security.*;

@Path("/invoices")

public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    @OpenAPIDefinition(servers = {@Server(url = "https://api.example.com")})
    public String read(@PathParam("invoiceId") String invoiceId) { return invoiceId; }
}

a375: SecurityScheme gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
OpenAPI Annotation
Annotation
@SecurityScheme
Import/Package
org.eclipse.microprofile.openapi.annotations.security
Priorität
5/10
Einsatzort
API-Dokumentation und Vertrag
Wichtige Parameter
securitySchemeName; type; scheme
Warum wichtig
Hält API-Vertrag für Clients verständlich.
Typischer Fehler
Doku und Runtime-Verhalten auseinanderlaufen lassen.
Enterprise-Einordnung
Wichtig fuer API-Governance und Partnerintegration.
Ausgangspunkt-Code
public class InvoiceResource {
    public String read(String invoiceId) { return invoiceId; }
}
Ziel-Code
import jakarta.ws.rs.*;
import org.eclipse.microprofile.openapi.annotations.*;
import org.eclipse.microprofile.openapi.annotations.info.*;
import org.eclipse.microprofile.openapi.annotations.media.*;
import org.eclipse.microprofile.openapi.annotations.responses.*;
import org.eclipse.microprofile.rest.client.inject.*;
import org.eclipse.microprofile.health.*;
import io.smallrye.config.*;
import io.quarkus.test.security.*;

@Path("/invoices")
@SecurityScheme(securitySchemeName = "bearerAuth", type = SecuritySchemeType.HTTP, scheme = "bearer")
public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    
    public String read(@PathParam("invoiceId") String invoiceId) { return invoiceId; }
}

a376: SecurityRequirement gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
OpenAPI Annotation
Annotation
@SecurityRequirement
Import/Package
org.eclipse.microprofile.openapi.annotations.security
Priorität
5/10
Einsatzort
API-Dokumentation und Vertrag
Wichtige Parameter
name; scopes
Warum wichtig
Hält API-Vertrag für Clients verständlich.
Typischer Fehler
Doku und Runtime-Verhalten auseinanderlaufen lassen.
Enterprise-Einordnung
Wichtig fuer API-Governance und Partnerintegration.
Ausgangspunkt-Code
public class InvoiceResource {
    public String read(String invoiceId) { return invoiceId; }
}
Ziel-Code
import jakarta.ws.rs.*;
import org.eclipse.microprofile.openapi.annotations.*;
import org.eclipse.microprofile.openapi.annotations.info.*;
import org.eclipse.microprofile.openapi.annotations.media.*;
import org.eclipse.microprofile.openapi.annotations.responses.*;
import org.eclipse.microprofile.rest.client.inject.*;
import org.eclipse.microprofile.health.*;
import io.smallrye.config.*;
import io.quarkus.test.security.*;

@Path("/invoices")

public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    @SecurityRequirement(name = "bearerAuth")
    public String read(@PathParam("invoiceId") String invoiceId) { return invoiceId; }
}

a377: Content gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
OpenAPI Annotation
Annotation
@Content
Import/Package
org.eclipse.microprofile.openapi.annotations.media
Priorität
5/10
Einsatzort
API-Dokumentation und Vertrag
Wichtige Parameter
mediaType; schema; examples
Warum wichtig
Hält API-Vertrag für Clients verständlich.
Typischer Fehler
Doku und Runtime-Verhalten auseinanderlaufen lassen.
Enterprise-Einordnung
Wichtig fuer API-Governance und Partnerintegration.
Ausgangspunkt-Code
public class InvoiceResource {
    public String read(String invoiceId) { return invoiceId; }
}
Ziel-Code
import jakarta.ws.rs.*;
import org.eclipse.microprofile.openapi.annotations.*;
import org.eclipse.microprofile.openapi.annotations.info.*;
import org.eclipse.microprofile.openapi.annotations.media.*;
import org.eclipse.microprofile.openapi.annotations.responses.*;
import org.eclipse.microprofile.rest.client.inject.*;
import org.eclipse.microprofile.health.*;
import io.smallrye.config.*;
import io.quarkus.test.security.*;

@Path("/invoices")

public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    @APIResponse(responseCode = "200", content = @Content(mediaType = "application/json"))
    public String read(@PathParam("invoiceId") String invoiceId) { return invoiceId; }
}

a378: ExampleObject gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
OpenAPI Annotation
Annotation
@ExampleObject
Import/Package
org.eclipse.microprofile.openapi.annotations.media
Priorität
5/10
Einsatzort
API-Dokumentation und Vertrag
Wichtige Parameter
name; summary; value
Warum wichtig
Hält API-Vertrag für Clients verständlich.
Typischer Fehler
Doku und Runtime-Verhalten auseinanderlaufen lassen.
Enterprise-Einordnung
Wichtig fuer API-Governance und Partnerintegration.
Ausgangspunkt-Code
public class InvoiceResource {
    public String read(String invoiceId) { return invoiceId; }
}
Ziel-Code
import jakarta.ws.rs.*;
import org.eclipse.microprofile.openapi.annotations.*;
import org.eclipse.microprofile.openapi.annotations.info.*;
import org.eclipse.microprofile.openapi.annotations.media.*;
import org.eclipse.microprofile.openapi.annotations.responses.*;
import org.eclipse.microprofile.rest.client.inject.*;
import org.eclipse.microprofile.health.*;
import io.smallrye.config.*;
import io.quarkus.test.security.*;

@Path("/invoices")

public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    @APIResponse(responseCode = "200", content = @Content(examples = @ExampleObject(name = "paid", value = "{\"status\":\"PAID\"}")))
    public String read(@PathParam("invoiceId") String invoiceId) { return invoiceId; }
}

a379: ArraySchema gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
OpenAPI Annotation
Annotation
@ArraySchema
Import/Package
org.eclipse.microprofile.openapi.annotations.media
Priorität
5/10
Einsatzort
API-Dokumentation und Vertrag
Wichtige Parameter
schema; minItems; maxItems
Warum wichtig
Hält API-Vertrag für Clients verständlich.
Typischer Fehler
Doku und Runtime-Verhalten auseinanderlaufen lassen.
Enterprise-Einordnung
Wichtig fuer API-Governance und Partnerintegration.
Ausgangspunkt-Code
public class InvoiceResource {
    public String read(String invoiceId) { return invoiceId; }
}
Ziel-Code
import jakarta.ws.rs.*;
import org.eclipse.microprofile.openapi.annotations.*;
import org.eclipse.microprofile.openapi.annotations.info.*;
import org.eclipse.microprofile.openapi.annotations.media.*;
import org.eclipse.microprofile.openapi.annotations.responses.*;
import org.eclipse.microprofile.rest.client.inject.*;
import org.eclipse.microprofile.health.*;
import io.smallrye.config.*;
import io.quarkus.test.security.*;

@Path("/invoices")

public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    @APIResponse(responseCode = "200", content = @Content(mediaType = "application/json"))
    public String read(@PathParam("invoiceId") String invoiceId) { return invoiceId; }
}

a380: Hidden gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
OpenAPI Annotation
Annotation
@Hidden
Import/Package
org.eclipse.microprofile.openapi.annotations
Priorität
5/10
Einsatzort
API-Dokumentation und Vertrag
Wichtige Parameter
keine Parameter
Warum wichtig
Hält API-Vertrag für Clients verständlich.
Typischer Fehler
Doku und Runtime-Verhalten auseinanderlaufen lassen.
Enterprise-Einordnung
Wichtig fuer API-Governance und Partnerintegration.
Ausgangspunkt-Code
public class InvoiceResource {
    public String read(String invoiceId) { return invoiceId; }
}
Ziel-Code
import jakarta.ws.rs.*;
import org.eclipse.microprofile.openapi.annotations.*;
import org.eclipse.microprofile.openapi.annotations.info.*;
import org.eclipse.microprofile.openapi.annotations.media.*;
import org.eclipse.microprofile.openapi.annotations.responses.*;
import org.eclipse.microprofile.rest.client.inject.*;
import org.eclipse.microprofile.health.*;
import io.smallrye.config.*;
import io.quarkus.test.security.*;

@Path("/invoices")

public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    @Hidden
    public String read(@PathParam("invoiceId") String invoiceId) { return invoiceId; }
}

a381: Callback gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
OpenAPI Annotation
Annotation
@Callback
Import/Package
org.eclipse.microprofile.openapi.annotations.callbacks
Priorität
5/10
Einsatzort
API-Dokumentation und Vertrag
Wichtige Parameter
name; callbackUrlExpression
Warum wichtig
Hält API-Vertrag für Clients verständlich.
Typischer Fehler
Doku und Runtime-Verhalten auseinanderlaufen lassen.
Enterprise-Einordnung
Wichtig fuer API-Governance und Partnerintegration.
Ausgangspunkt-Code
public class InvoiceResource {
    public String read(String invoiceId) { return invoiceId; }
}
Ziel-Code
import jakarta.ws.rs.*;
import org.eclipse.microprofile.openapi.annotations.*;
import org.eclipse.microprofile.openapi.annotations.info.*;
import org.eclipse.microprofile.openapi.annotations.media.*;
import org.eclipse.microprofile.openapi.annotations.responses.*;
import org.eclipse.microprofile.rest.client.inject.*;
import org.eclipse.microprofile.health.*;
import io.smallrye.config.*;
import io.quarkus.test.security.*;

@Path("/invoices")

public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    @Callback(name = "invoicePosted", callbackUrlExpression = "{$request.body#/callbackUrl}")
    public String read(@PathParam("invoiceId") String invoiceId) { return invoiceId; }
}

a382: Link gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
OpenAPI Annotation
Annotation
@Link
Import/Package
org.eclipse.microprofile.openapi.annotations.links
Priorität
5/10
Einsatzort
API-Dokumentation und Vertrag
Wichtige Parameter
name; operationId
Warum wichtig
Hält API-Vertrag für Clients verständlich.
Typischer Fehler
Doku und Runtime-Verhalten auseinanderlaufen lassen.
Enterprise-Einordnung
Wichtig fuer API-Governance und Partnerintegration.
Ausgangspunkt-Code
public class InvoiceResource {
    public String read(String invoiceId) { return invoiceId; }
}
Ziel-Code
import jakarta.ws.rs.*;
import org.eclipse.microprofile.openapi.annotations.*;
import org.eclipse.microprofile.openapi.annotations.info.*;
import org.eclipse.microprofile.openapi.annotations.media.*;
import org.eclipse.microprofile.openapi.annotations.responses.*;
import org.eclipse.microprofile.rest.client.inject.*;
import org.eclipse.microprofile.health.*;
import io.smallrye.config.*;
import io.quarkus.test.security.*;

@Path("/invoices")

public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    @APIResponse(responseCode = "201", links = @Link(name = "invoiceStatus", operationId = "getInvoiceStatus"))
    public String read(@PathParam("invoiceId") String invoiceId) { return invoiceId; }
}

a383: RegisterProvider gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
MicroProfile Annotation
Annotation
@RegisterProvider
Import/Package
org.eclipse.microprofile.rest.client.annotation
Priorität
6/10
Einsatzort
REST Client, Health oder Config
Wichtige Parameter
value; priority
Warum wichtig
Standardisiert Cloud-native Enterprise-Funktionen.
Typischer Fehler
Health, Config oder Client-Verhalten unklar lassen.
Enterprise-Einordnung
Relevant fuer Jakarta/Quarkus/MicroProfile-Landschaften.
Ausgangspunkt-Code
public class InvoiceResource {
    public String read(String invoiceId) { return invoiceId; }
}
Ziel-Code
import jakarta.ws.rs.*;
import org.eclipse.microprofile.openapi.annotations.*;
import org.eclipse.microprofile.openapi.annotations.info.*;
import org.eclipse.microprofile.openapi.annotations.media.*;
import org.eclipse.microprofile.openapi.annotations.responses.*;
import org.eclipse.microprofile.rest.client.inject.*;
import org.eclipse.microprofile.health.*;
import io.smallrye.config.*;
import io.quarkus.test.security.*;

@Path("/invoices")

public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    @RegisterProvider(PartnerErrorMapper.class)
    public String read(@PathParam("invoiceId") String invoiceId) { return invoiceId; }
}

a384: RegisterClientHeaders gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
MicroProfile Annotation
Annotation
@RegisterClientHeaders
Import/Package
org.eclipse.microprofile.rest.client.annotation
Priorität
6/10
Einsatzort
REST Client, Health oder Config
Wichtige Parameter
value
Warum wichtig
Standardisiert Cloud-native Enterprise-Funktionen.
Typischer Fehler
Health, Config oder Client-Verhalten unklar lassen.
Enterprise-Einordnung
Relevant fuer Jakarta/Quarkus/MicroProfile-Landschaften.
Ausgangspunkt-Code
public class InvoiceResource {
    public String read(String invoiceId) { return invoiceId; }
}
Ziel-Code
import jakarta.ws.rs.*;
import org.eclipse.microprofile.openapi.annotations.*;
import org.eclipse.microprofile.openapi.annotations.info.*;
import org.eclipse.microprofile.openapi.annotations.media.*;
import org.eclipse.microprofile.openapi.annotations.responses.*;
import org.eclipse.microprofile.rest.client.inject.*;
import org.eclipse.microprofile.health.*;
import io.smallrye.config.*;
import io.quarkus.test.security.*;

@Path("/invoices")

public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    @RegisterClientHeaders(BillingClientHeadersFactory.class)
    public String read(@PathParam("invoiceId") String invoiceId) { return invoiceId; }
}

a385: ClientHeaderParam gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
MicroProfile Annotation
Annotation
@ClientHeaderParam
Import/Package
org.eclipse.microprofile.rest.client.annotation
Priorität
6/10
Einsatzort
REST Client, Health oder Config
Wichtige Parameter
name; value; required
Warum wichtig
Standardisiert Cloud-native Enterprise-Funktionen.
Typischer Fehler
Health, Config oder Client-Verhalten unklar lassen.
Enterprise-Einordnung
Relevant fuer Jakarta/Quarkus/MicroProfile-Landschaften.
Ausgangspunkt-Code
public class InvoiceResource {
    public String read(String invoiceId) { return invoiceId; }
}
Ziel-Code
import jakarta.ws.rs.*;
import org.eclipse.microprofile.openapi.annotations.*;
import org.eclipse.microprofile.openapi.annotations.info.*;
import org.eclipse.microprofile.openapi.annotations.media.*;
import org.eclipse.microprofile.openapi.annotations.responses.*;
import org.eclipse.microprofile.rest.client.inject.*;
import org.eclipse.microprofile.health.*;
import io.smallrye.config.*;
import io.quarkus.test.security.*;

@Path("/invoices")

public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    @ClientHeaderParam(name = "X-Api-Version", value = "2026-07")
    public String read(@PathParam("invoiceId") String invoiceId) { return invoiceId; }
}

a386: Liveness gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
MicroProfile Annotation
Annotation
@Liveness
Import/Package
org.eclipse.microprofile.health
Priorität
6/10
Einsatzort
REST Client, Health oder Config
Wichtige Parameter
keine Parameter
Warum wichtig
Standardisiert Cloud-native Enterprise-Funktionen.
Typischer Fehler
Health, Config oder Client-Verhalten unklar lassen.
Enterprise-Einordnung
Relevant fuer Jakarta/Quarkus/MicroProfile-Landschaften.
Ausgangspunkt-Code
public class InvoiceResource {
    public String read(String invoiceId) { return invoiceId; }
}
Ziel-Code
import jakarta.ws.rs.*;
import org.eclipse.microprofile.openapi.annotations.*;
import org.eclipse.microprofile.openapi.annotations.info.*;
import org.eclipse.microprofile.openapi.annotations.media.*;
import org.eclipse.microprofile.openapi.annotations.responses.*;
import org.eclipse.microprofile.rest.client.inject.*;
import org.eclipse.microprofile.health.*;
import io.smallrye.config.*;
import io.quarkus.test.security.*;

@Path("/invoices")
@Liveness
public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    
    public String read(@PathParam("invoiceId") String invoiceId) { return invoiceId; }
}

a387: Readiness gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
MicroProfile Annotation
Annotation
@Readiness
Import/Package
org.eclipse.microprofile.health
Priorität
6/10
Einsatzort
REST Client, Health oder Config
Wichtige Parameter
keine Parameter
Warum wichtig
Standardisiert Cloud-native Enterprise-Funktionen.
Typischer Fehler
Health, Config oder Client-Verhalten unklar lassen.
Enterprise-Einordnung
Relevant fuer Jakarta/Quarkus/MicroProfile-Landschaften.
Ausgangspunkt-Code
public class InvoiceResource {
    public String read(String invoiceId) { return invoiceId; }
}
Ziel-Code
import jakarta.ws.rs.*;
import org.eclipse.microprofile.openapi.annotations.*;
import org.eclipse.microprofile.openapi.annotations.info.*;
import org.eclipse.microprofile.openapi.annotations.media.*;
import org.eclipse.microprofile.openapi.annotations.responses.*;
import org.eclipse.microprofile.rest.client.inject.*;
import org.eclipse.microprofile.health.*;
import io.smallrye.config.*;
import io.quarkus.test.security.*;

@Path("/invoices")
@Readiness
public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    
    public String read(@PathParam("invoiceId") String invoiceId) { return invoiceId; }
}

a388: ConfigMapping gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Quarkus Annotation
Annotation
@ConfigMapping
Import/Package
io.smallrye.config
Priorität
5/10
Einsatzort
Quarkus Bean, Test oder Build-Zeit
Wichtige Parameter
prefix; namingStrategy
Warum wichtig
Steuert Build-Time- und Testverhalten gezielt.
Typischer Fehler
Build-Time und Runtime-Konfiguration verwechseln.
Enterprise-Einordnung
Wichtig fuer Quarkus und Native-Image-Projekte.
Ausgangspunkt-Code
public class InvoiceResource {
    public String read(String invoiceId) { return invoiceId; }
}
Ziel-Code
import jakarta.ws.rs.*;
import org.eclipse.microprofile.openapi.annotations.*;
import org.eclipse.microprofile.openapi.annotations.info.*;
import org.eclipse.microprofile.openapi.annotations.media.*;
import org.eclipse.microprofile.openapi.annotations.responses.*;
import org.eclipse.microprofile.rest.client.inject.*;
import org.eclipse.microprofile.health.*;
import io.smallrye.config.*;
import io.quarkus.test.security.*;

@Path("/invoices")
@ConfigMapping(prefix = "billing")
public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    
    public String read(@PathParam("invoiceId") String invoiceId) { return invoiceId; }
}

a389: WithName gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Quarkus Annotation
Annotation
@WithName
Import/Package
io.smallrye.config
Priorität
5/10
Einsatzort
Quarkus Bean, Test oder Build-Zeit
Wichtige Parameter
value
Warum wichtig
Steuert Build-Time- und Testverhalten gezielt.
Typischer Fehler
Build-Time und Runtime-Konfiguration verwechseln.
Enterprise-Einordnung
Wichtig fuer Quarkus und Native-Image-Projekte.
Ausgangspunkt-Code
public class InvoiceResource {
    public String read(String invoiceId) { return invoiceId; }
}
Ziel-Code
import jakarta.ws.rs.*;
import org.eclipse.microprofile.openapi.annotations.*;
import org.eclipse.microprofile.openapi.annotations.info.*;
import org.eclipse.microprofile.openapi.annotations.media.*;
import org.eclipse.microprofile.openapi.annotations.responses.*;
import org.eclipse.microprofile.rest.client.inject.*;
import org.eclipse.microprofile.health.*;
import io.smallrye.config.*;
import io.quarkus.test.security.*;

@Path("/invoices")

public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    @WithName("partner-url")
    public String read(@PathParam("invoiceId") String invoiceId) { return invoiceId; }
}

a390: WithDefault gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Quarkus Annotation
Annotation
@WithDefault
Import/Package
io.smallrye.config
Priorität
5/10
Einsatzort
Quarkus Bean, Test oder Build-Zeit
Wichtige Parameter
value
Warum wichtig
Steuert Build-Time- und Testverhalten gezielt.
Typischer Fehler
Build-Time und Runtime-Konfiguration verwechseln.
Enterprise-Einordnung
Wichtig fuer Quarkus und Native-Image-Projekte.
Ausgangspunkt-Code
public class InvoiceResource {
    public String read(String invoiceId) { return invoiceId; }
}
Ziel-Code
import jakarta.ws.rs.*;
import org.eclipse.microprofile.openapi.annotations.*;
import org.eclipse.microprofile.openapi.annotations.info.*;
import org.eclipse.microprofile.openapi.annotations.media.*;
import org.eclipse.microprofile.openapi.annotations.responses.*;
import org.eclipse.microprofile.rest.client.inject.*;
import org.eclipse.microprofile.health.*;
import io.smallrye.config.*;
import io.quarkus.test.security.*;

@Path("/invoices")

public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    @WithDefault("PT5S")
    public String read(@PathParam("invoiceId") String invoiceId) { return invoiceId; }
}

a391: WithConverter gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Quarkus Annotation
Annotation
@WithConverter
Import/Package
io.smallrye.config
Priorität
5/10
Einsatzort
Quarkus Bean, Test oder Build-Zeit
Wichtige Parameter
value
Warum wichtig
Steuert Build-Time- und Testverhalten gezielt.
Typischer Fehler
Build-Time und Runtime-Konfiguration verwechseln.
Enterprise-Einordnung
Wichtig fuer Quarkus und Native-Image-Projekte.
Ausgangspunkt-Code
public class InvoiceResource {
    public String read(String invoiceId) { return invoiceId; }
}
Ziel-Code
import jakarta.ws.rs.*;
import org.eclipse.microprofile.openapi.annotations.*;
import org.eclipse.microprofile.openapi.annotations.info.*;
import org.eclipse.microprofile.openapi.annotations.media.*;
import org.eclipse.microprofile.openapi.annotations.responses.*;
import org.eclipse.microprofile.rest.client.inject.*;
import org.eclipse.microprofile.health.*;
import io.smallrye.config.*;
import io.quarkus.test.security.*;

@Path("/invoices")

public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    @WithConverter(BillingModeConverter.class)
    public String read(@PathParam("invoiceId") String invoiceId) { return invoiceId; }
}

a392: IfBuildProfile gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Quarkus Annotation
Annotation
@IfBuildProfile
Import/Package
io.quarkus.arc.profile
Priorität
5/10
Einsatzort
Quarkus Bean, Test oder Build-Zeit
Wichtige Parameter
value; allOf; anyOf
Warum wichtig
Steuert Build-Time- und Testverhalten gezielt.
Typischer Fehler
Build-Time und Runtime-Konfiguration verwechseln.
Enterprise-Einordnung
Wichtig fuer Quarkus und Native-Image-Projekte.
Ausgangspunkt-Code
public class InvoiceResource {
    public String read(String invoiceId) { return invoiceId; }
}
Ziel-Code
import jakarta.ws.rs.*;
import org.eclipse.microprofile.openapi.annotations.*;
import org.eclipse.microprofile.openapi.annotations.info.*;
import org.eclipse.microprofile.openapi.annotations.media.*;
import org.eclipse.microprofile.openapi.annotations.responses.*;
import org.eclipse.microprofile.rest.client.inject.*;
import org.eclipse.microprofile.health.*;
import io.smallrye.config.*;
import io.quarkus.test.security.*;

@Path("/invoices")

public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    @IfBuildProfile("prod")
    public String read(@PathParam("invoiceId") String invoiceId) { return invoiceId; }
}

a393: UnlessBuildProfile gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Quarkus Annotation
Annotation
@UnlessBuildProfile
Import/Package
io.quarkus.arc.profile
Priorität
5/10
Einsatzort
Quarkus Bean, Test oder Build-Zeit
Wichtige Parameter
value; allOf; anyOf
Warum wichtig
Steuert Build-Time- und Testverhalten gezielt.
Typischer Fehler
Build-Time und Runtime-Konfiguration verwechseln.
Enterprise-Einordnung
Wichtig fuer Quarkus und Native-Image-Projekte.
Ausgangspunkt-Code
public class InvoiceResource {
    public String read(String invoiceId) { return invoiceId; }
}
Ziel-Code
import jakarta.ws.rs.*;
import org.eclipse.microprofile.openapi.annotations.*;
import org.eclipse.microprofile.openapi.annotations.info.*;
import org.eclipse.microprofile.openapi.annotations.media.*;
import org.eclipse.microprofile.openapi.annotations.responses.*;
import org.eclipse.microprofile.rest.client.inject.*;
import org.eclipse.microprofile.health.*;
import io.smallrye.config.*;
import io.quarkus.test.security.*;

@Path("/invoices")

public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    @UnlessBuildProfile("prod")
    public String read(@PathParam("invoiceId") String invoiceId) { return invoiceId; }
}

a394: IfBuildProperty gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Quarkus Annotation
Annotation
@IfBuildProperty
Import/Package
io.quarkus.arc.properties
Priorität
5/10
Einsatzort
Quarkus Bean, Test oder Build-Zeit
Wichtige Parameter
name; stringValue
Warum wichtig
Steuert Build-Time- und Testverhalten gezielt.
Typischer Fehler
Build-Time und Runtime-Konfiguration verwechseln.
Enterprise-Einordnung
Wichtig fuer Quarkus und Native-Image-Projekte.
Ausgangspunkt-Code
public class InvoiceResource {
    public String read(String invoiceId) { return invoiceId; }
}
Ziel-Code
import jakarta.ws.rs.*;
import org.eclipse.microprofile.openapi.annotations.*;
import org.eclipse.microprofile.openapi.annotations.info.*;
import org.eclipse.microprofile.openapi.annotations.media.*;
import org.eclipse.microprofile.openapi.annotations.responses.*;
import org.eclipse.microprofile.rest.client.inject.*;
import org.eclipse.microprofile.health.*;
import io.smallrye.config.*;
import io.quarkus.test.security.*;

@Path("/invoices")

public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    @IfBuildProperty(name = "billing.partner.enabled", stringValue = "true")
    public String read(@PathParam("invoiceId") String invoiceId) { return invoiceId; }
}

a395: UnlessBuildProperty gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Quarkus Annotation
Annotation
@UnlessBuildProperty
Import/Package
io.quarkus.arc.properties
Priorität
5/10
Einsatzort
Quarkus Bean, Test oder Build-Zeit
Wichtige Parameter
name; stringValue
Warum wichtig
Steuert Build-Time- und Testverhalten gezielt.
Typischer Fehler
Build-Time und Runtime-Konfiguration verwechseln.
Enterprise-Einordnung
Wichtig fuer Quarkus und Native-Image-Projekte.
Ausgangspunkt-Code
public class InvoiceResource {
    public String read(String invoiceId) { return invoiceId; }
}
Ziel-Code
import jakarta.ws.rs.*;
import org.eclipse.microprofile.openapi.annotations.*;
import org.eclipse.microprofile.openapi.annotations.info.*;
import org.eclipse.microprofile.openapi.annotations.media.*;
import org.eclipse.microprofile.openapi.annotations.responses.*;
import org.eclipse.microprofile.rest.client.inject.*;
import org.eclipse.microprofile.health.*;
import io.smallrye.config.*;
import io.quarkus.test.security.*;

@Path("/invoices")

public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    @UnlessBuildProperty(name = "billing.mock.enabled", stringValue = "true")
    public String read(@PathParam("invoiceId") String invoiceId) { return invoiceId; }
}

a396: Observed gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Observability/Resilience Annotation
Annotation
@Observed
Import/Package
io.micrometer.observation.annotation
Priorität
7/10
Einsatzort
Service, Gateway oder externer Call
Wichtige Parameter
name; contextualName; lowCardinalityKeyValues
Warum wichtig
Verbessert Betriebssicht, Timeouts und Schutz vor Lastspitzen.
Typischer Fehler
High-cardinality Tags oder unpassende Fallbacks verwenden.
Enterprise-Einordnung
Wichtig fuer stabile Cloud-/OpenShift-Systeme.
Ausgangspunkt-Code
public class InvoiceEventProcessor {
    public String process(String invoiceId) { return "posted-" + invoiceId; }
}
Ziel-Code
import org.eclipse.microprofile.reactive.messaging.*;
import io.smallrye.reactive.messaging.kafka.*;
import io.micrometer.observation.annotation.*;
import io.micrometer.tracing.annotation.*;
import io.github.resilience4j.ratelimiter.annotation.*;
import io.github.resilience4j.timelimiter.annotation.*;
import java.util.concurrent.*;

public class InvoiceEventProcessor {
    @Observed(name = "billing.invoice.post")
    public CompletableFuture<String> process(String invoiceId) {
        return CompletableFuture.completedFuture("posted-" + invoiceId);
    }
}

a397: NewSpan gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Observability/Resilience Annotation
Annotation
@NewSpan
Import/Package
io.micrometer.tracing.annotation
Priorität
7/10
Einsatzort
Service, Gateway oder externer Call
Wichtige Parameter
name; value
Warum wichtig
Verbessert Betriebssicht, Timeouts und Schutz vor Lastspitzen.
Typischer Fehler
High-cardinality Tags oder unpassende Fallbacks verwenden.
Enterprise-Einordnung
Wichtig fuer stabile Cloud-/OpenShift-Systeme.
Ausgangspunkt-Code
public class InvoiceEventProcessor {
    public String process(String invoiceId) { return "posted-" + invoiceId; }
}
Ziel-Code
import org.eclipse.microprofile.reactive.messaging.*;
import io.smallrye.reactive.messaging.kafka.*;
import io.micrometer.observation.annotation.*;
import io.micrometer.tracing.annotation.*;
import io.github.resilience4j.ratelimiter.annotation.*;
import io.github.resilience4j.timelimiter.annotation.*;
import java.util.concurrent.*;

public class InvoiceEventProcessor {
    @NewSpan("partner-invoice-upload")
    public CompletableFuture<String> process(String invoiceId) {
        return CompletableFuture.completedFuture("posted-" + invoiceId);
    }
}

a398: ContinueSpan gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Observability/Resilience Annotation
Annotation
@ContinueSpan
Import/Package
io.micrometer.tracing.annotation
Priorität
7/10
Einsatzort
Service, Gateway oder externer Call
Wichtige Parameter
log; value
Warum wichtig
Verbessert Betriebssicht, Timeouts und Schutz vor Lastspitzen.
Typischer Fehler
High-cardinality Tags oder unpassende Fallbacks verwenden.
Enterprise-Einordnung
Wichtig fuer stabile Cloud-/OpenShift-Systeme.
Ausgangspunkt-Code
public class InvoiceEventProcessor {
    public String process(String invoiceId) { return "posted-" + invoiceId; }
}
Ziel-Code
import org.eclipse.microprofile.reactive.messaging.*;
import io.smallrye.reactive.messaging.kafka.*;
import io.micrometer.observation.annotation.*;
import io.micrometer.tracing.annotation.*;
import io.github.resilience4j.ratelimiter.annotation.*;
import io.github.resilience4j.timelimiter.annotation.*;
import java.util.concurrent.*;

public class InvoiceEventProcessor {
    @ContinueSpan(log = "invoice-validation")
    public CompletableFuture<String> process(String invoiceId) {
        return CompletableFuture.completedFuture("posted-" + invoiceId);
    }
}

a399: SpanTag gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Observability/Resilience Annotation
Annotation
@SpanTag
Import/Package
io.micrometer.tracing.annotation
Priorität
7/10
Einsatzort
Service, Gateway oder externer Call
Wichtige Parameter
value; resolver; expression
Warum wichtig
Verbessert Betriebssicht, Timeouts und Schutz vor Lastspitzen.
Typischer Fehler
High-cardinality Tags oder unpassende Fallbacks verwenden.
Enterprise-Einordnung
Wichtig fuer stabile Cloud-/OpenShift-Systeme.
Ausgangspunkt-Code
public class InvoiceEventProcessor {
    public String process(String invoiceId) { return "posted-" + invoiceId; }
}
Ziel-Code
import org.eclipse.microprofile.reactive.messaging.*;
import io.smallrye.reactive.messaging.kafka.*;
import io.micrometer.observation.annotation.*;
import io.micrometer.tracing.annotation.*;
import io.github.resilience4j.ratelimiter.annotation.*;
import io.github.resilience4j.timelimiter.annotation.*;
import java.util.concurrent.*;

public class InvoiceEventProcessor {
    @SpanTag("invoice.type")
    public CompletableFuture<String> process(String invoiceId) {
        return CompletableFuture.completedFuture("posted-" + invoiceId);
    }
}

a400: RateLimiter gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Observability/Resilience Annotation
Annotation
@RateLimiter
Import/Package
io.github.resilience4j.ratelimiter.annotation
Priorität
7/10
Einsatzort
Service, Gateway oder externer Call
Wichtige Parameter
name; fallbackMethod
Warum wichtig
Verbessert Betriebssicht, Timeouts und Schutz vor Lastspitzen.
Typischer Fehler
High-cardinality Tags oder unpassende Fallbacks verwenden.
Enterprise-Einordnung
Wichtig fuer stabile Cloud-/OpenShift-Systeme.
Ausgangspunkt-Code
public class InvoiceEventProcessor {
    public String process(String invoiceId) { return "posted-" + invoiceId; }
}
Ziel-Code
import org.eclipse.microprofile.reactive.messaging.*;
import io.smallrye.reactive.messaging.kafka.*;
import io.micrometer.observation.annotation.*;
import io.micrometer.tracing.annotation.*;
import io.github.resilience4j.ratelimiter.annotation.*;
import io.github.resilience4j.timelimiter.annotation.*;
import java.util.concurrent.*;

public class InvoiceEventProcessor {
    @RateLimiter(name = "partnerBilling", fallbackMethod = "rateLimited")
    public CompletableFuture<String> process(String invoiceId) {
        return CompletableFuture.completedFuture("posted-" + invoiceId);
    }
}

a401: TimeLimiter gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Observability/Resilience Annotation
Annotation
@TimeLimiter
Import/Package
io.github.resilience4j.timelimiter.annotation
Priorität
7/10
Einsatzort
Service, Gateway oder externer Call
Wichtige Parameter
name; fallbackMethod
Warum wichtig
Verbessert Betriebssicht, Timeouts und Schutz vor Lastspitzen.
Typischer Fehler
High-cardinality Tags oder unpassende Fallbacks verwenden.
Enterprise-Einordnung
Wichtig fuer stabile Cloud-/OpenShift-Systeme.
Ausgangspunkt-Code
public class InvoiceEventProcessor {
    public String process(String invoiceId) { return "posted-" + invoiceId; }
}
Ziel-Code
import org.eclipse.microprofile.reactive.messaging.*;
import io.smallrye.reactive.messaging.kafka.*;
import io.micrometer.observation.annotation.*;
import io.micrometer.tracing.annotation.*;
import io.github.resilience4j.ratelimiter.annotation.*;
import io.github.resilience4j.timelimiter.annotation.*;
import java.util.concurrent.*;

public class InvoiceEventProcessor {
    @TimeLimiter(name = "partnerBilling", fallbackMethod = "timeoutFallback")
    public CompletableFuture<String> process(String invoiceId) {
        return CompletableFuture.completedFuture("posted-" + invoiceId);
    }
}
Jackson, Lombok und MapStruct56 Einträge

a402: JSON Property Namen setzen

Englischer technischer Begriff
Jackson JSON Property
Annotation
@JsonProperty
Import/Package
com.fasterxml.jackson.annotation
Priorität
8/10
Einsatzort
DTOs
Wichtige Parameter
value; required; access; defaultValue; index
Warum wichtig
Stabilisiert externen JSON-Namen.
Typischer Fehler
Java-Refactoring ändert API unbemerkt.
Enterprise-Einordnung
Wichtig für REST-Kompatibilität.
Ausgangspunkt-Code
public class OrderDto {
    public String customerNumber;
}
Ziel-Code
import com.fasterxml.jackson.annotation.JsonProperty;

public class OrderDto {
    @JsonProperty(value = "customer_no", required = true)
    private String customerNumber;

    public String customerNumber() { return customerNumber; }
}

a403: JSON Feld ignorieren

Englischer technischer Begriff
Jackson JSON Ignore
Annotation
@JsonIgnore
Import/Package
com.fasterxml.jackson.annotation
Priorität
8/10
Einsatzort
Secrets/interne Felder
Wichtige Parameter
value
Warum wichtig
Verhindert Serialisierung/Deserialisierung.
Typischer Fehler
Passwort-Feld in Response DTO lassen.
Enterprise-Einordnung
Security-kritisch.
Ausgangspunkt-Code
public class OrderDto {
    public String customerNumber;
}
Ziel-Code
import com.fasterxml.jackson.annotation.JsonIgnore;

public class OrderDto {
    @JsonIgnore
    private String customerNumber;

    public String customerNumber() { return customerNumber; }
}

a404: Unbekannte JSON Felder tolerieren

Englischer technischer Begriff
Jackson Ignore Unknown Properties
Annotation
@JsonIgnoreProperties
Import/Package
com.fasterxml.jackson.annotation
Priorität
7/10
Einsatzort
API Clients/DTOs
Wichtige Parameter
value; ignoreUnknown; allowGetters; allowSetters
Warum wichtig
Macht Clients vorwärtskompatibel.
Typischer Fehler
Unbekannte Felder überall ignorieren und Tippfehler übersehen.
Enterprise-Einordnung
Gezielt bei externen APIs einsetzen.
Ausgangspunkt-Code
public class OrderDto {
    public String customerNumber;
}
Ziel-Code
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class OrderDto {
    public String orderId;
    public String customerNo;
}

a405: Null-Werte aus JSON ausschließen

Englischer technischer Begriff
Jackson JSON Include
Annotation
@JsonInclude
Import/Package
com.fasterxml.jackson.annotation
Priorität
6/10
Einsatzort
Response DTOs
Wichtige Parameter
value; content; valueFilter; contentFilter
Warum wichtig
Reduziert unnötige Felder.
Typischer Fehler
Semantik null vs absent ignorieren.
Enterprise-Einordnung
API-Kontrakt bewusst definieren.
Ausgangspunkt-Code
public class OrderDto {
    public String customerNumber;
}
Ziel-Code
import com.fasterxml.jackson.annotation.JsonInclude;

@JsonInclude(JsonInclude.Include.NON_NULL)
public class OrderDto {
    public String orderId;
    public String customerNo;
}

a406: Datum/Zahl formatieren

Englischer technischer Begriff
Jackson JSON Format
Annotation
@JsonFormat
Import/Package
com.fasterxml.jackson.annotation
Priorität
7/10
Einsatzort
Datum im JSON
Wichtige Parameter
shape; pattern; timezone; locale
Warum wichtig
Macht Format explizit.
Typischer Fehler
System-Zeitzone in API leaken.
Enterprise-Einordnung
Wichtig bei internationalen Clients.
Ausgangspunkt-Code
public class OrderDto {
    public String customerNumber;
}
Ziel-Code
import com.fasterxml.jackson.annotation.JsonFormat;

public class OrderDto {
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "UTC")
    private String customerNumber;

    public String customerNumber() { return customerNumber; }
}

a407: Konstruktorbasierte Deserialisierung

Englischer technischer Begriff
Jackson JSON Creator
Annotation
@JsonCreator
Import/Package
com.fasterxml.jackson.annotation
Priorität
7/10
Einsatzort
Immutable DTOs
Wichtige Parameter
mode
Warum wichtig
Erlaubt sichere immutable DTOs.
Typischer Fehler
Mehrdeutige Konstruktoren ohne Property-Namen.
Enterprise-Einordnung
Gut mit Records/Value Objects.
Ausgangspunkt-Code
public class OrderDto {
    public String customerNumber;
}
Ziel-Code
import com.fasterxml.jackson.annotation.JsonCreator;

public class OrderDto {
    private final String orderId;

    @JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
    public OrderDto(@com.fasterxml.jackson.annotation.JsonProperty("order_id") String orderId) {
        this.orderId = orderId;
    }
}

a408: Enum Wert serialisieren

Englischer technischer Begriff
Jackson JSON Value
Annotation
@JsonValue
Import/Package
com.fasterxml.jackson.annotation
Priorität
6/10
Einsatzort
Enums/Value Objects
Wichtige Parameter
value
Warum wichtig
Definiert externen Wert.
Typischer Fehler
Enum name() als dauerhaften API-Code verwenden.
Enterprise-Einordnung
Wichtig für stabile Codes.
Ausgangspunkt-Code
public class OrderDto {
    public String customerNumber;
}
Ziel-Code
import com.fasterxml.jackson.annotation.JsonValue;

public class OrderDto {
    @JsonValue
    private String customerNumber;

    public String customerNumber() { return customerNumber; }
}

a409: Polymorphes JSON markieren

Englischer technischer Begriff
Jackson Type Info
Annotation
@JsonTypeInfo
Import/Package
com.fasterxml.jackson.annotation
Priorität
5/10
Einsatzort
Event DTOs
Wichtige Parameter
use; include; property; defaultImpl
Warum wichtig
Serialisiert Typinformation.
Typischer Fehler
Polymorphie mit unsicheren Default Typing öffnen.
Enterprise-Einordnung
Nur kontrolliert bei Event-Modellen.
Ausgangspunkt-Code
public class OrderDto {
    public String customerNumber;
}
Ziel-Code
import com.fasterxml.jackson.annotation.JsonTypeInfo;

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
public class OrderDto {
    public String orderId;
    public String customerNo;
}

a410: Getter generieren

Englischer technischer Begriff
Lombok Getter
Annotation
@Getter
Import/Package
lombok
Priorität
5/10
Einsatzort
DTOs/Entities
Wichtige Parameter
value; onMethod; lazy
Warum wichtig
Reduziert Boilerplate.
Typischer Fehler
Lombok auf Entities blind einsetzen.
Enterprise-Einordnung
Praktisch, aber Teamstandard nötig.
Ausgangspunkt-Code
public class OrderDto {
    public String customerNumber;
}
Ziel-Code
import lombok.Getter;

public class OrderDto {
    @Getter
    private String customerNumber;

    public String customerNumber() { return customerNumber; }
}

a411: Setter generieren

Englischer technischer Begriff
Lombok Setter
Annotation
@Setter
Import/Package
lombok
Priorität
4/10
Einsatzort
DTOs
Wichtige Parameter
value; onMethod; onParam
Warum wichtig
Reduziert Boilerplate.
Typischer Fehler
Mutable Setter für Aggregate freigeben.
Enterprise-Einordnung
Bei Domain-Modellen sparsam.
Ausgangspunkt-Code
public class OrderDto {
    public String customerNumber;
}
Ziel-Code
import lombok.Setter;

public class OrderDto {
    @Setter
    private String customerNumber;

    public String customerNumber() { return customerNumber; }
}

a412: Builder erzeugen

Englischer technischer Begriff
Lombok Builder
Annotation
@Builder
Import/Package
lombok
Priorität
6/10
Einsatzort
DTOs/Commands
Wichtige Parameter
builderMethodName; buildMethodName; toBuilder; setterPrefix
Warum wichtig
Erzeugt Builder API.
Typischer Fehler
Pflichtfelder nicht validieren.
Enterprise-Einordnung
Gut für Testdaten und Commands.
Ausgangspunkt-Code
public class OrderDto {
    public String customerNumber;
}
Ziel-Code
import lombok.Builder;

@Builder(toBuilder = true)
public class OrderDto {
    public String orderId;
    public String customerNo;
}

a413: Required Constructor erzeugen

Englischer technischer Begriff
Lombok Required Args Constructor
Annotation
@RequiredArgsConstructor
Import/Package
lombok
Priorität
6/10
Einsatzort
Spring Services
Wichtige Parameter
staticName; access; onConstructor
Warum wichtig
Erzeugt Konstruktor für final Felder.
Typischer Fehler
Autowired Field Injection verstecken.
Enterprise-Einordnung
Gut für Konstruktorinjektion.
Ausgangspunkt-Code
public class OrderDto {
    public String customerNumber;
}
Ziel-Code
import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
public class OrderDto {
    public String orderId;
    public String customerNo;
}

a414: Immutable Lombok Value

Englischer technischer Begriff
Lombok Value Object
Annotation
@Value
Import/Package
lombok
Priorität
5/10
Einsatzort
kleine Value Objects
Wichtige Parameter
staticConstructor
Warum wichtig
Macht Klasse immutable.
Typischer Fehler
Für JPA Entities verwenden.
Enterprise-Einordnung
Besser für DTO/Value Object, nicht Entity.
Ausgangspunkt-Code
public class OrderDto {
    public String customerNumber;
}
Ziel-Code
import lombok.Value;

@Value
public class OrderDto {
    public String orderId;
    public String customerNo;
}

a415: Logger generieren

Englischer technischer Begriff
Lombok SLF4J Logger
Annotation
@Slf4j
Import/Package
lombok.extern.slf4j
Priorität
5/10
Einsatzort
Services
Wichtige Parameter
topic
Warum wichtig
Erzeugt Logger-Feld.
Typischer Fehler
PII in Logs schreiben.
Enterprise-Einordnung
Nützlich, aber Logging-Regeln beachten.
Ausgangspunkt-Code
public class OrderDto {
    public String customerNumber;
}
Ziel-Code
import lombok.extern.slf4j.Slf4j;

@Slf4j(topic = "billing.audit")
public class OrderDto {
    public String orderId;
    public String customerNo;
}

a416: Mapper Interface definieren

Englischer technischer Begriff
MapStruct Mapper
Annotation
@Mapper
Import/Package
org.mapstruct
Priorität
8/10
Einsatzort
DTO Mapping
Wichtige Parameter
componentModel; uses; injectionStrategy; unmappedTargetPolicy
Warum wichtig
Generiert typsichere Mapper.
Typischer Fehler
Mapping manuell und inkonsistent duplizieren.
Enterprise-Einordnung
Sehr gut für API/Domain Trennung.
Ausgangspunkt-Code
public class OrderDto {
    public String customerNumber;
}
Ziel-Code
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;

@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.ERROR)
public interface OrderMapper {
    OrderDto toDto(OrderEntity order);
}

a417: Feldmapping definieren

Englischer technischer Begriff
MapStruct Mapping
Annotation
@Mapping
Import/Package
org.mapstruct
Priorität
8/10
Einsatzort
DTO Mapping
Wichtige Parameter
source; target; constant; expression; ignore; defaultValue; dateFormat
Warum wichtig
Definiert abweichende Feldnamen.
Typischer Fehler
Magic Mapping ohne Compile-Time-Fehler.
Enterprise-Einordnung
Wichtig bei Legacy DTOs.
Ausgangspunkt-Code
public class OrderDto {
    public String customerNumber;
}
Ziel-Code
import org.mapstruct.Mapping;

public interface OrderMapper {
    @Mapping(source = "customer.number", target = "customerNo")
    OrderDto toDto(OrderEntity order);
}

a418: Mehrere Mappings bündeln

Englischer technischer Begriff
MapStruct Mappings
Annotation
@Mappings
Import/Package
org.mapstruct
Priorität
5/10
Einsatzort
komplexe DTOs
Wichtige Parameter
value
Warum wichtig
Bündelt mehrere @Mapping.
Typischer Fehler
Veraltetes Bündeln, obwohl wiederholbares @Mapping reicht.
Enterprise-Einordnung
Heute oft optional, aber in Legacy-Code sichtbar.
Ausgangspunkt-Code
public class OrderDto {
    public String customerNumber;
}
Ziel-Code
import org.mapstruct.Mappings;

public interface OrderMapper {
    @Mappings
    OrderDto toDto(OrderEntity order);
}

a419: Bean Mapping steuern

Englischer technischer Begriff
MapStruct Bean Mapping
Annotation
@BeanMapping
Import/Package
org.mapstruct
Priorität
7/10
Einsatzort
partielle Views
Wichtige Parameter
ignoreByDefault; nullValueMappingStrategy; qualifiedByName; resultType
Warum wichtig
Steuert Mapping-Verhalten.
Typischer Fehler
Unbeabsichtigte Felder mappen.
Enterprise-Einordnung
Gut für schlanke API-Responses.
Ausgangspunkt-Code
public class OrderDto {
    public String customerNumber;
}
Ziel-Code
import org.mapstruct.BeanMapping;

public interface OrderMapper {
    @BeanMapping(ignoreByDefault = true)
    OrderDto toDto(OrderEntity order);
}

a420: Nach Mapping nachbearbeiten

Englischer technischer Begriff
MapStruct After Mapping
Annotation
@AfterMapping
Import/Package
org.mapstruct
Priorität
6/10
Einsatzort
Mapping Hooks
Wichtige Parameter
keine Parameter; kombiniert mit @MappingTarget
Warum wichtig
Erlaubt kontrollierte Nachbearbeitung.
Typischer Fehler
Businesslogik im Mapper verstecken.
Enterprise-Einordnung
Nur für Mapping-nahe Ergänzungen.
Ausgangspunkt-Code
public class OrderDto {
    public String customerNumber;
}
Ziel-Code
import org.mapstruct.AfterMapping;

public interface OrderMapper {
    @AfterMapping
    OrderDto toDto(OrderEntity order);
}

a421: Vor Mapping vorbereiten

Englischer technischer Begriff
MapStruct Before Mapping
Annotation
@BeforeMapping
Import/Package
org.mapstruct
Priorität
5/10
Einsatzort
Mapping Hooks
Wichtige Parameter
keine Parameter; Context/Target möglich
Warum wichtig
Bereitet Mapping vor.
Typischer Fehler
Seiteneffekte im Mapper ausführen.
Enterprise-Einordnung
Sparsam einsetzen.
Ausgangspunkt-Code
public class OrderDto {
    public String customerNumber;
}
Ziel-Code
import org.mapstruct.BeforeMapping;

public interface OrderMapper {
    @BeforeMapping
    OrderDto toDto(OrderEntity order);
}

a422: MappingTarget aktualisieren

Englischer technischer Begriff
MapStruct Mapping Target
Annotation
@MappingTarget
Import/Package
org.mapstruct
Priorität
7/10
Einsatzort
Update Mapping
Wichtige Parameter
keine Parameter
Warum wichtig
Aktualisiert bestehendes Zielobjekt.
Typischer Fehler
Entity blind mit null-Werten überschreiben.
Enterprise-Einordnung
Wichtig bei Patch/Update Use Cases.
Ausgangspunkt-Code
public class OrderDto {
    public String customerNumber;
}
Ziel-Code
import org.mapstruct.MappingTarget;

public interface OrderMapper {
    void update(OrderDto source, @MappingTarget OrderEntity target);
}

a423: JsonAlias gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jackson Annotation
Annotation
@JsonAlias
Import/Package
com.fasterxml.jackson.annotation
Priorität
6/10
Einsatzort
DTO, API Payload oder Importformat
Wichtige Parameter
value
Warum wichtig
Steuert JSON-Vertrag ohne manuelle Mapper-Logik.
Typischer Fehler
Entity direkt unkontrolliert serialisieren.
Enterprise-Einordnung
Wichtig fuer stabile APIs und Partnerdaten.
Ausgangspunkt-Code
public record InvoicePayload(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.annotation.*;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import java.math.BigDecimal;
import java.util.*;

public class InvoicePayload {
    @JsonAlias({"invoiceNo", "legacyInvoiceNumber"})
    private String invoiceNumber;
    private BigDecimal grossTotal;

    
    public Map<String,Object> metadata() { return Map.of("source", "partner"); }
}

a424: JsonAnyGetter gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jackson Annotation
Annotation
@JsonAnyGetter
Import/Package
com.fasterxml.jackson.annotation
Priorität
6/10
Einsatzort
DTO, API Payload oder Importformat
Wichtige Parameter
keine Parameter
Warum wichtig
Steuert JSON-Vertrag ohne manuelle Mapper-Logik.
Typischer Fehler
Entity direkt unkontrolliert serialisieren.
Enterprise-Einordnung
Wichtig fuer stabile APIs und Partnerdaten.
Ausgangspunkt-Code
public record InvoicePayload(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.annotation.*;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import java.math.BigDecimal;
import java.util.*;

public class InvoicePayload {
    
    private String invoiceNumber;
    private BigDecimal grossTotal;

    @JsonAnyGetter
    public Map<String,Object> metadata() { return Map.of("source", "partner"); }
}

a425: JsonAnySetter gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jackson Annotation
Annotation
@JsonAnySetter
Import/Package
com.fasterxml.jackson.annotation
Priorität
6/10
Einsatzort
DTO, API Payload oder Importformat
Wichtige Parameter
keine Parameter
Warum wichtig
Steuert JSON-Vertrag ohne manuelle Mapper-Logik.
Typischer Fehler
Entity direkt unkontrolliert serialisieren.
Enterprise-Einordnung
Wichtig fuer stabile APIs und Partnerdaten.
Ausgangspunkt-Code
public record InvoicePayload(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.annotation.*;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import java.math.BigDecimal;
import java.util.*;

public class InvoicePayload {
    
    private String invoiceNumber;
    private BigDecimal grossTotal;

    
    public Map<String,Object> metadata() { return Map.of("source", "partner"); }
}

a426: JsonDeserialize gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jackson Annotation
Annotation
@JsonDeserialize
Import/Package
com.fasterxml.jackson.databind.annotation
Priorität
6/10
Einsatzort
DTO, API Payload oder Importformat
Wichtige Parameter
using; contentUsing; keyUsing
Warum wichtig
Steuert JSON-Vertrag ohne manuelle Mapper-Logik.
Typischer Fehler
Entity direkt unkontrolliert serialisieren.
Enterprise-Einordnung
Wichtig fuer stabile APIs und Partnerdaten.
Ausgangspunkt-Code
public record InvoicePayload(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.annotation.*;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import java.math.BigDecimal;
import java.util.*;

public class InvoicePayload {
    @JsonDeserialize(using = MoneyDeserializer.class)
    private String invoiceNumber;
    private BigDecimal grossTotal;

    
    public Map<String,Object> metadata() { return Map.of("source", "partner"); }
}

a427: JsonSerialize gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jackson Annotation
Annotation
@JsonSerialize
Import/Package
com.fasterxml.jackson.databind.annotation
Priorität
6/10
Einsatzort
DTO, API Payload oder Importformat
Wichtige Parameter
using; contentUsing; keyUsing
Warum wichtig
Steuert JSON-Vertrag ohne manuelle Mapper-Logik.
Typischer Fehler
Entity direkt unkontrolliert serialisieren.
Enterprise-Einordnung
Wichtig fuer stabile APIs und Partnerdaten.
Ausgangspunkt-Code
public record InvoicePayload(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.annotation.*;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import java.math.BigDecimal;
import java.util.*;

public class InvoicePayload {
    @JsonSerialize(using = MoneySerializer.class)
    private String invoiceNumber;
    private BigDecimal grossTotal;

    
    public Map<String,Object> metadata() { return Map.of("source", "partner"); }
}

a428: JsonNaming gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jackson Annotation
Annotation
@JsonNaming
Import/Package
com.fasterxml.jackson.databind.annotation
Priorität
6/10
Einsatzort
DTO, API Payload oder Importformat
Wichtige Parameter
value
Warum wichtig
Steuert JSON-Vertrag ohne manuelle Mapper-Logik.
Typischer Fehler
Entity direkt unkontrolliert serialisieren.
Enterprise-Einordnung
Wichtig fuer stabile APIs und Partnerdaten.
Ausgangspunkt-Code
public record InvoicePayload(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.annotation.*;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import java.math.BigDecimal;
import java.util.*;

@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
public class InvoicePayload {
    
    private String invoiceNumber;
    private BigDecimal grossTotal;

    
    public Map<String,Object> metadata() { return Map.of("source", "partner"); }
}

a429: JsonView gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jackson Annotation
Annotation
@JsonView
Import/Package
com.fasterxml.jackson.annotation
Priorität
6/10
Einsatzort
DTO, API Payload oder Importformat
Wichtige Parameter
value
Warum wichtig
Steuert JSON-Vertrag ohne manuelle Mapper-Logik.
Typischer Fehler
Entity direkt unkontrolliert serialisieren.
Enterprise-Einordnung
Wichtig fuer stabile APIs und Partnerdaten.
Ausgangspunkt-Code
public record InvoicePayload(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.annotation.*;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import java.math.BigDecimal;
import java.util.*;

public class InvoicePayload {
    @JsonView(Views.Public.class)
    private String invoiceNumber;
    private BigDecimal grossTotal;

    
    public Map<String,Object> metadata() { return Map.of("source", "partner"); }
}

a430: JsonManagedReference gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jackson Annotation
Annotation
@JsonManagedReference
Import/Package
com.fasterxml.jackson.annotation
Priorität
6/10
Einsatzort
DTO, API Payload oder Importformat
Wichtige Parameter
value
Warum wichtig
Steuert JSON-Vertrag ohne manuelle Mapper-Logik.
Typischer Fehler
Entity direkt unkontrolliert serialisieren.
Enterprise-Einordnung
Wichtig fuer stabile APIs und Partnerdaten.
Ausgangspunkt-Code
public record InvoicePayload(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.annotation.*;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import java.math.BigDecimal;
import java.util.*;

public class InvoicePayload {
    @JsonManagedReference("invoice-lines")
    private String invoiceNumber;
    private BigDecimal grossTotal;

    
    public Map<String,Object> metadata() { return Map.of("source", "partner"); }
}

a431: JsonBackReference gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jackson Annotation
Annotation
@JsonBackReference
Import/Package
com.fasterxml.jackson.annotation
Priorität
6/10
Einsatzort
DTO, API Payload oder Importformat
Wichtige Parameter
value
Warum wichtig
Steuert JSON-Vertrag ohne manuelle Mapper-Logik.
Typischer Fehler
Entity direkt unkontrolliert serialisieren.
Enterprise-Einordnung
Wichtig fuer stabile APIs und Partnerdaten.
Ausgangspunkt-Code
public record InvoicePayload(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.annotation.*;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import java.math.BigDecimal;
import java.util.*;

public class InvoicePayload {
    @JsonBackReference("invoice-lines")
    private String invoiceNumber;
    private BigDecimal grossTotal;

    
    public Map<String,Object> metadata() { return Map.of("source", "partner"); }
}

a432: JsonIdentityInfo gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jackson Annotation
Annotation
@JsonIdentityInfo
Import/Package
com.fasterxml.jackson.annotation
Priorität
6/10
Einsatzort
DTO, API Payload oder Importformat
Wichtige Parameter
generator; property; resolver
Warum wichtig
Steuert JSON-Vertrag ohne manuelle Mapper-Logik.
Typischer Fehler
Entity direkt unkontrolliert serialisieren.
Enterprise-Einordnung
Wichtig fuer stabile APIs und Partnerdaten.
Ausgangspunkt-Code
public record InvoicePayload(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.annotation.*;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import java.math.BigDecimal;
import java.util.*;

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
public class InvoicePayload {
    
    private String invoiceNumber;
    private BigDecimal grossTotal;

    
    public Map<String,Object> metadata() { return Map.of("source", "partner"); }
}

a433: JsonUnwrapped gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jackson Annotation
Annotation
@JsonUnwrapped
Import/Package
com.fasterxml.jackson.annotation
Priorität
6/10
Einsatzort
DTO, API Payload oder Importformat
Wichtige Parameter
prefix; suffix; enabled
Warum wichtig
Steuert JSON-Vertrag ohne manuelle Mapper-Logik.
Typischer Fehler
Entity direkt unkontrolliert serialisieren.
Enterprise-Einordnung
Wichtig fuer stabile APIs und Partnerdaten.
Ausgangspunkt-Code
public record InvoicePayload(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.annotation.*;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import java.math.BigDecimal;
import java.util.*;

public class InvoicePayload {
    @JsonUnwrapped(prefix = "billing_")
    private String invoiceNumber;
    private BigDecimal grossTotal;

    
    public Map<String,Object> metadata() { return Map.of("source", "partner"); }
}

a434: JsonRawValue gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jackson Annotation
Annotation
@JsonRawValue
Import/Package
com.fasterxml.jackson.annotation
Priorität
6/10
Einsatzort
DTO, API Payload oder Importformat
Wichtige Parameter
value
Warum wichtig
Steuert JSON-Vertrag ohne manuelle Mapper-Logik.
Typischer Fehler
Entity direkt unkontrolliert serialisieren.
Enterprise-Einordnung
Wichtig fuer stabile APIs und Partnerdaten.
Ausgangspunkt-Code
public record InvoicePayload(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.annotation.*;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import java.math.BigDecimal;
import java.util.*;

public class InvoicePayload {
    @JsonRawValue
    private String invoiceNumber;
    private BigDecimal grossTotal;

    
    public Map<String,Object> metadata() { return Map.of("source", "partner"); }
}

a435: JsonRootName gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jackson Annotation
Annotation
@JsonRootName
Import/Package
com.fasterxml.jackson.annotation
Priorität
6/10
Einsatzort
DTO, API Payload oder Importformat
Wichtige Parameter
value; namespace
Warum wichtig
Steuert JSON-Vertrag ohne manuelle Mapper-Logik.
Typischer Fehler
Entity direkt unkontrolliert serialisieren.
Enterprise-Einordnung
Wichtig fuer stabile APIs und Partnerdaten.
Ausgangspunkt-Code
public record InvoicePayload(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.annotation.*;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import java.math.BigDecimal;
import java.util.*;

@JsonRootName("invoice")
public class InvoicePayload {
    
    private String invoiceNumber;
    private BigDecimal grossTotal;

    
    public Map<String,Object> metadata() { return Map.of("source", "partner"); }
}

a436: JsonPropertyOrder gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jackson Annotation
Annotation
@JsonPropertyOrder
Import/Package
com.fasterxml.jackson.annotation
Priorität
6/10
Einsatzort
DTO, API Payload oder Importformat
Wichtige Parameter
value; alphabetic
Warum wichtig
Steuert JSON-Vertrag ohne manuelle Mapper-Logik.
Typischer Fehler
Entity direkt unkontrolliert serialisieren.
Enterprise-Einordnung
Wichtig fuer stabile APIs und Partnerdaten.
Ausgangspunkt-Code
public record InvoicePayload(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.annotation.*;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import java.math.BigDecimal;
import java.util.*;

@JsonPropertyOrder({"invoiceNumber", "customerNumber", "grossTotal"})
public class InvoicePayload {
    
    private String invoiceNumber;
    private BigDecimal grossTotal;

    
    public Map<String,Object> metadata() { return Map.of("source", "partner"); }
}

a437: JsonGetter gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jackson Annotation
Annotation
@JsonGetter
Import/Package
com.fasterxml.jackson.annotation
Priorität
6/10
Einsatzort
DTO, API Payload oder Importformat
Wichtige Parameter
value
Warum wichtig
Steuert JSON-Vertrag ohne manuelle Mapper-Logik.
Typischer Fehler
Entity direkt unkontrolliert serialisieren.
Enterprise-Einordnung
Wichtig fuer stabile APIs und Partnerdaten.
Ausgangspunkt-Code
public record InvoicePayload(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.annotation.*;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import java.math.BigDecimal;
import java.util.*;

public class InvoicePayload {
    
    private String invoiceNumber;
    private BigDecimal grossTotal;

    @JsonGetter("invoice_no")
    public Map<String,Object> metadata() { return Map.of("source", "partner"); }
}

a438: JsonSetter gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jackson Annotation
Annotation
@JsonSetter
Import/Package
com.fasterxml.jackson.annotation
Priorität
6/10
Einsatzort
DTO, API Payload oder Importformat
Wichtige Parameter
value; nulls; contentNulls
Warum wichtig
Steuert JSON-Vertrag ohne manuelle Mapper-Logik.
Typischer Fehler
Entity direkt unkontrolliert serialisieren.
Enterprise-Einordnung
Wichtig fuer stabile APIs und Partnerdaten.
Ausgangspunkt-Code
public record InvoicePayload(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.annotation.*;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import java.math.BigDecimal;
import java.util.*;

public class InvoicePayload {
    
    private String invoiceNumber;
    private BigDecimal grossTotal;

    
    public Map<String,Object> metadata() { return Map.of("source", "partner"); }
}

a439: JsonMerge gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Jackson Annotation
Annotation
@JsonMerge
Import/Package
com.fasterxml.jackson.annotation
Priorität
6/10
Einsatzort
DTO, API Payload oder Importformat
Wichtige Parameter
value
Warum wichtig
Steuert JSON-Vertrag ohne manuelle Mapper-Logik.
Typischer Fehler
Entity direkt unkontrolliert serialisieren.
Enterprise-Einordnung
Wichtig fuer stabile APIs und Partnerdaten.
Ausgangspunkt-Code
public record InvoicePayload(
    String invoiceNumber,
    java.math.BigDecimal grossTotal
) {}
Ziel-Code
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.annotation.*;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import java.math.BigDecimal;
import java.util.*;

public class InvoicePayload {
    @JsonMerge
    private String invoiceNumber;
    private BigDecimal grossTotal;

    
    public Map<String,Object> metadata() { return Map.of("source", "partner"); }
}

a440: AllArgsConstructor gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Lombok Annotation
Annotation
@AllArgsConstructor
Import/Package
lombok
Priorität
4/10
Einsatzort
DTO, Value Object oder technische Klasse
Wichtige Parameter
access; staticName
Warum wichtig
Reduziert Boilerplate, wenn bewusst begrenzt eingesetzt.
Typischer Fehler
Lombok verdeckt Entity- oder Security-Probleme.
Enterprise-Einordnung
Nützlich, aber in Enterprise-Code bewusst prüfen.
Ausgangspunkt-Code
public class InvoiceCommand {
    private final String invoiceNumber;
    private final java.math.BigDecimal grossTotal;
}
Ziel-Code
import lombok.*;
import lombok.experimental.*;
import java.math.BigDecimal;

@AllArgsConstructor(staticName = "of")
public class InvoiceCommand {
    private String invoiceNumber;
    private BigDecimal grossTotal;
}

a441: NoArgsConstructor gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Lombok Annotation
Annotation
@NoArgsConstructor
Import/Package
lombok
Priorität
4/10
Einsatzort
DTO, Value Object oder technische Klasse
Wichtige Parameter
access; force
Warum wichtig
Reduziert Boilerplate, wenn bewusst begrenzt eingesetzt.
Typischer Fehler
Lombok verdeckt Entity- oder Security-Probleme.
Enterprise-Einordnung
Nützlich, aber in Enterprise-Code bewusst prüfen.
Ausgangspunkt-Code
public class InvoiceCommand {
    private final String invoiceNumber;
    private final java.math.BigDecimal grossTotal;
}
Ziel-Code
import lombok.*;
import lombok.experimental.*;
import java.math.BigDecimal;

@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class InvoiceCommand {
    private String invoiceNumber;
    private BigDecimal grossTotal;
}

a442: EqualsAndHashCode gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Lombok Annotation
Annotation
@EqualsAndHashCode
Import/Package
lombok
Priorität
4/10
Einsatzort
DTO, Value Object oder technische Klasse
Wichtige Parameter
onlyExplicitlyIncluded; callSuper
Warum wichtig
Reduziert Boilerplate, wenn bewusst begrenzt eingesetzt.
Typischer Fehler
Lombok verdeckt Entity- oder Security-Probleme.
Enterprise-Einordnung
Nützlich, aber in Enterprise-Code bewusst prüfen.
Ausgangspunkt-Code
public class InvoiceCommand {
    private final String invoiceNumber;
    private final java.math.BigDecimal grossTotal;
}
Ziel-Code
import lombok.*;
import lombok.experimental.*;
import java.math.BigDecimal;

@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class InvoiceCommand {
    private String invoiceNumber;
    private BigDecimal grossTotal;
}

a443: ToString gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Lombok Annotation
Annotation
@ToString
Import/Package
lombok
Priorität
4/10
Einsatzort
DTO, Value Object oder technische Klasse
Wichtige Parameter
exclude; onlyExplicitlyIncluded
Warum wichtig
Reduziert Boilerplate, wenn bewusst begrenzt eingesetzt.
Typischer Fehler
Lombok verdeckt Entity- oder Security-Probleme.
Enterprise-Einordnung
Nützlich, aber in Enterprise-Code bewusst prüfen.
Ausgangspunkt-Code
public class InvoiceCommand {
    private final String invoiceNumber;
    private final java.math.BigDecimal grossTotal;
}
Ziel-Code
import lombok.*;
import lombok.experimental.*;
import java.math.BigDecimal;

@ToString(onlyExplicitlyIncluded = true)
public class InvoiceCommand {
    private String invoiceNumber;
    private BigDecimal grossTotal;
}

a444: SuperBuilder gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Lombok Annotation
Annotation
@SuperBuilder
Import/Package
lombok.experimental
Priorität
4/10
Einsatzort
DTO, Value Object oder technische Klasse
Wichtige Parameter
toBuilder; builderMethodName
Warum wichtig
Reduziert Boilerplate, wenn bewusst begrenzt eingesetzt.
Typischer Fehler
Lombok verdeckt Entity- oder Security-Probleme.
Enterprise-Einordnung
Nützlich, aber in Enterprise-Code bewusst prüfen.
Ausgangspunkt-Code
public class InvoiceCommand {
    private final String invoiceNumber;
    private final java.math.BigDecimal grossTotal;
}
Ziel-Code
import lombok.*;
import lombok.experimental.*;
import java.math.BigDecimal;

@SuperBuilder(toBuilder = true)
public class InvoiceCommand {
    private String invoiceNumber;
    private BigDecimal grossTotal;
}

a445: With gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Lombok Annotation
Annotation
@With
Import/Package
lombok
Priorität
4/10
Einsatzort
DTO, Value Object oder technische Klasse
Wichtige Parameter
value
Warum wichtig
Reduziert Boilerplate, wenn bewusst begrenzt eingesetzt.
Typischer Fehler
Lombok verdeckt Entity- oder Security-Probleme.
Enterprise-Einordnung
Nützlich, aber in Enterprise-Code bewusst prüfen.
Ausgangspunkt-Code
public class InvoiceCommand {
    private final String invoiceNumber;
    private final java.math.BigDecimal grossTotal;
}
Ziel-Code
import lombok.*;
import lombok.experimental.*;
import java.math.BigDecimal;

@With
public class InvoiceCommand {
    private String invoiceNumber;
    private BigDecimal grossTotal;
}

a446: SneakyThrows gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Lombok Annotation
Annotation
@SneakyThrows
Import/Package
lombok
Priorität
4/10
Einsatzort
DTO, Value Object oder technische Klasse
Wichtige Parameter
value
Warum wichtig
Reduziert Boilerplate, wenn bewusst begrenzt eingesetzt.
Typischer Fehler
Lombok verdeckt Entity- oder Security-Probleme.
Enterprise-Einordnung
Nützlich, aber in Enterprise-Code bewusst prüfen.
Ausgangspunkt-Code
public class InvoiceCommand {
    private final String invoiceNumber;
    private final java.math.BigDecimal grossTotal;
}
Ziel-Code
import lombok.*;
import lombok.experimental.*;
import java.math.BigDecimal;

@SneakyThrows(java.io.IOException.class)
public class InvoiceCommand {
    private String invoiceNumber;
    private BigDecimal grossTotal;
}

a447: Cleanup gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Lombok Annotation
Annotation
@Cleanup
Import/Package
lombok
Priorität
4/10
Einsatzort
DTO, Value Object oder technische Klasse
Wichtige Parameter
value
Warum wichtig
Reduziert Boilerplate, wenn bewusst begrenzt eingesetzt.
Typischer Fehler
Lombok verdeckt Entity- oder Security-Probleme.
Enterprise-Einordnung
Nützlich, aber in Enterprise-Code bewusst prüfen.
Ausgangspunkt-Code
public class InvoiceCommand {
    private final String invoiceNumber;
    private final java.math.BigDecimal grossTotal;
}
Ziel-Code
import lombok.*;
import lombok.experimental.*;
import java.math.BigDecimal;

@RequiredArgsConstructor
public class InvoiceCommand {
    private String invoiceNumber;
    private BigDecimal grossTotal;
}

a448: MapperConfig gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
MapStruct Annotation
Annotation
@MapperConfig
Import/Package
org.mapstruct
Priorität
7/10
Einsatzort
Mapper Interface oder Mapping-Methode
Wichtige Parameter
componentModel; unmappedTargetPolicy
Warum wichtig
Macht DTO-Mapping compile-time sicher.
Typischer Fehler
Mapping-Sonderfälle in Services verteilen.
Enterprise-Einordnung
Wichtig fuer saubere Schichten und Modernisierung.
Ausgangspunkt-Code
public interface InvoiceMapper {
    InvoiceDto toDto(InvoiceEntity entity);
}
Ziel-Code
import org.mapstruct.*;

@Mapper(componentModel = "spring")
public interface InvoiceMapper {
    @MapperConfig(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.ERROR)
    InvoiceDto toDto(InvoiceEntity entity);
}

a449: InheritConfiguration gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
MapStruct Annotation
Annotation
@InheritConfiguration
Import/Package
org.mapstruct
Priorität
7/10
Einsatzort
Mapper Interface oder Mapping-Methode
Wichtige Parameter
name
Warum wichtig
Macht DTO-Mapping compile-time sicher.
Typischer Fehler
Mapping-Sonderfälle in Services verteilen.
Enterprise-Einordnung
Wichtig fuer saubere Schichten und Modernisierung.
Ausgangspunkt-Code
public interface InvoiceMapper {
    InvoiceDto toDto(InvoiceEntity entity);
}
Ziel-Code
import org.mapstruct.*;

@Mapper(componentModel = "spring")
public interface InvoiceMapper {
    @InheritConfiguration(name = "toEntity")
    InvoiceDto toDto(InvoiceEntity entity);
}

a450: InheritInverseConfiguration gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
MapStruct Annotation
Annotation
@InheritInverseConfiguration
Import/Package
org.mapstruct
Priorität
7/10
Einsatzort
Mapper Interface oder Mapping-Methode
Wichtige Parameter
name
Warum wichtig
Macht DTO-Mapping compile-time sicher.
Typischer Fehler
Mapping-Sonderfälle in Services verteilen.
Enterprise-Einordnung
Wichtig fuer saubere Schichten und Modernisierung.
Ausgangspunkt-Code
public interface InvoiceMapper {
    InvoiceDto toDto(InvoiceEntity entity);
}
Ziel-Code
import org.mapstruct.*;

@Mapper(componentModel = "spring")
public interface InvoiceMapper {
    @InheritInverseConfiguration(name = "toDto")
    InvoiceDto toDto(InvoiceEntity entity);
}

a451: ValueMapping gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
MapStruct Annotation
Annotation
@ValueMapping
Import/Package
org.mapstruct
Priorität
7/10
Einsatzort
Mapper Interface oder Mapping-Methode
Wichtige Parameter
source; target
Warum wichtig
Macht DTO-Mapping compile-time sicher.
Typischer Fehler
Mapping-Sonderfälle in Services verteilen.
Enterprise-Einordnung
Wichtig fuer saubere Schichten und Modernisierung.
Ausgangspunkt-Code
public interface InvoiceMapper {
    InvoiceDto toDto(InvoiceEntity entity);
}
Ziel-Code
import org.mapstruct.*;

@Mapper(componentModel = "spring")
public interface InvoiceMapper {
    @ValueMapping(source = "CANCELLED", target = "VOID")
    InvoiceDto toDto(InvoiceEntity entity);
}

a452: EnumMapping gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
MapStruct Annotation
Annotation
@EnumMapping
Import/Package
org.mapstruct
Priorität
7/10
Einsatzort
Mapper Interface oder Mapping-Methode
Wichtige Parameter
nameTransformationStrategy; configuration
Warum wichtig
Macht DTO-Mapping compile-time sicher.
Typischer Fehler
Mapping-Sonderfälle in Services verteilen.
Enterprise-Einordnung
Wichtig fuer saubere Schichten und Modernisierung.
Ausgangspunkt-Code
public interface InvoiceMapper {
    InvoiceDto toDto(InvoiceEntity entity);
}
Ziel-Code
import org.mapstruct.*;

@Mapper(componentModel = "spring")
public interface InvoiceMapper {
    @EnumMapping(nameTransformationStrategy = "stripPrefix", configuration = "LEGACY_")
    InvoiceDto toDto(InvoiceEntity entity);
}

a453: ObjectFactory gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
MapStruct Annotation
Annotation
@ObjectFactory
Import/Package
org.mapstruct
Priorität
7/10
Einsatzort
Mapper Interface oder Mapping-Methode
Wichtige Parameter
keine Parameter
Warum wichtig
Macht DTO-Mapping compile-time sicher.
Typischer Fehler
Mapping-Sonderfälle in Services verteilen.
Enterprise-Einordnung
Wichtig fuer saubere Schichten und Modernisierung.
Ausgangspunkt-Code
public interface InvoiceMapper {
    InvoiceDto toDto(InvoiceEntity entity);
}
Ziel-Code
import org.mapstruct.*;

@Mapper(componentModel = "spring")
public interface InvoiceMapper {
    @ObjectFactory
    InvoiceDto toDto(InvoiceEntity entity);
}

a454: Condition gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
MapStruct Annotation
Annotation
@Condition
Import/Package
org.mapstruct
Priorität
7/10
Einsatzort
Mapper Interface oder Mapping-Methode
Wichtige Parameter
appliesTo
Warum wichtig
Macht DTO-Mapping compile-time sicher.
Typischer Fehler
Mapping-Sonderfälle in Services verteilen.
Enterprise-Einordnung
Wichtig fuer saubere Schichten und Modernisierung.
Ausgangspunkt-Code
public interface InvoiceMapper {
    InvoiceDto toDto(InvoiceEntity entity);
}
Ziel-Code
import org.mapstruct.*;

@Mapper(componentModel = "spring")
public interface InvoiceMapper {
    @Condition
    InvoiceDto toDto(InvoiceEntity entity);
}

a455: SubclassMapping gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
MapStruct Annotation
Annotation
@SubclassMapping
Import/Package
org.mapstruct
Priorität
7/10
Einsatzort
Mapper Interface oder Mapping-Methode
Wichtige Parameter
source; target
Warum wichtig
Macht DTO-Mapping compile-time sicher.
Typischer Fehler
Mapping-Sonderfälle in Services verteilen.
Enterprise-Einordnung
Wichtig fuer saubere Schichten und Modernisierung.
Ausgangspunkt-Code
public interface InvoiceMapper {
    InvoiceDto toDto(InvoiceEntity entity);
}
Ziel-Code
import org.mapstruct.*;

@Mapper(componentModel = "spring")
public interface InvoiceMapper {
    @SubclassMapping(source = CreditNote.class, target = CreditNoteDto.class)
    InvoiceDto toDto(InvoiceEntity entity);
}

a456: DecoratedWith gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
MapStruct Annotation
Annotation
@DecoratedWith
Import/Package
org.mapstruct
Priorität
7/10
Einsatzort
Mapper Interface oder Mapping-Methode
Wichtige Parameter
value
Warum wichtig
Macht DTO-Mapping compile-time sicher.
Typischer Fehler
Mapping-Sonderfälle in Services verteilen.
Enterprise-Einordnung
Wichtig fuer saubere Schichten und Modernisierung.
Ausgangspunkt-Code
public interface InvoiceMapper {
    InvoiceDto toDto(InvoiceEntity entity);
}
Ziel-Code
import org.mapstruct.*;

@Mapper(componentModel = "spring")
public interface InvoiceMapper {
    @DecoratedWith(InvoiceMapperDecorator.class)
    InvoiceDto toDto(InvoiceEntity entity);
}

a457: IterableMapping gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
MapStruct Annotation
Annotation
@IterableMapping
Import/Package
org.mapstruct
Priorität
7/10
Einsatzort
Mapper Interface oder Mapping-Methode
Wichtige Parameter
elementTargetType; dateFormat
Warum wichtig
Macht DTO-Mapping compile-time sicher.
Typischer Fehler
Mapping-Sonderfälle in Services verteilen.
Enterprise-Einordnung
Wichtig fuer saubere Schichten und Modernisierung.
Ausgangspunkt-Code
public interface InvoiceMapper {
    InvoiceDto toDto(InvoiceEntity entity);
}
Ziel-Code
import org.mapstruct.*;

@Mapper(componentModel = "spring")
public interface InvoiceMapper {
    @IterableMapping(elementTargetType = InvoiceDto.class)
    InvoiceDto toDto(InvoiceEntity entity);
}
Testing, Testcontainers und Concurrent Tests41 Einträge

a458: JUnit Testmethode markieren

Englischer technischer Begriff
JUnit Test
Annotation
@Test
Import/Package
org.junit.jupiter.api
Priorität
9/10
Einsatzort
Unit Tests
Wichtige Parameter
keine Parameter
Warum wichtig
Markiert Testfall.
Typischer Fehler
Tests ohne aussagekräftige Assertions.
Enterprise-Einordnung
Basis jeder Modernisierung.
Ausgangspunkt-Code
class OrderServiceTest {
    void createsInvoiceNumber() {
        if (!"INV-42".startsWith("INV-")) {
            throw new AssertionError("invalid invoice number");
        }
    }
}
Ziel-Code
import org.junit.jupiter.api.Test;

class OrderServiceTest {
    @Test
    void createsInvoiceNumber() {
        org.junit.jupiter.api.Assertions.assertTrue("INV-42".startsWith("INV-"));
    }
}

a459: Parametrisierte Tests nutzen

Englischer technischer Begriff
JUnit Parameterized Test
Annotation
@ParameterizedTest
Import/Package
org.junit.jupiter.params
Priorität
8/10
Einsatzort
Regel-/Parser-Tests
Wichtige Parameter
name
Warum wichtig
Testet mehrere Fälle kompakt.
Typischer Fehler
Nur Happy Path parametrisieren.
Enterprise-Einordnung
Gut für Validierung und Mapping.
Ausgangspunkt-Code
class OrderServiceTest {
    void createsInvoiceNumber() {
        if (!"INV-42".startsWith("INV-")) {
            throw new AssertionError("invalid invoice number");
        }
    }
}
Ziel-Code
import org.junit.jupiter.params.ParameterizedTest;

class OrderServiceTest {
    @ParameterizedTest(name = "status {0} is accepted")
    void createsInvoiceNumber() {
        org.junit.jupiter.api.Assertions.assertTrue("INV-42".startsWith("INV-"));
    }
}

a460: CSV Testdaten direkt angeben

Englischer technischer Begriff
JUnit CSV Source
Annotation
@CsvSource
Import/Package
org.junit.jupiter.params.provider
Priorität
7/10
Einsatzort
kleine Testmatrizen
Wichtige Parameter
value; delimiter; nullValues; emptyValue
Warum wichtig
Liefert einfache Parameterdaten.
Typischer Fehler
Komplexe Objekte in CSV pressen.
Enterprise-Einordnung
Schnell für Regeln.
Ausgangspunkt-Code
class OrderServiceTest {
    void createsInvoiceNumber() {
        if (!"INV-42".startsWith("INV-")) {
            throw new AssertionError("invalid invoice number");
        }
    }
}
Ziel-Code
import org.junit.jupiter.params.provider.CsvSource;

class OrderServiceTest {
    @CsvSource({"OPEN,true", "CLOSED,false"})
    void createsInvoiceNumber() {
        org.junit.jupiter.api.Assertions.assertTrue("INV-42".startsWith("INV-"));
    }
}

a461: Vor jedem Test initialisieren

Englischer technischer Begriff
JUnit Before Each
Annotation
@BeforeEach
Import/Package
org.junit.jupiter.api
Priorität
7/10
Einsatzort
Test Setup
Wichtige Parameter
keine Parameter
Warum wichtig
Richtet sauberen Zustand ein.
Typischer Fehler
Globalen Zustand zwischen Tests teilen.
Enterprise-Einordnung
Wichtig für stabile Tests.
Ausgangspunkt-Code
class OrderServiceTest {
    void createsInvoiceNumber() {
        if (!"INV-42".startsWith("INV-")) {
            throw new AssertionError("invalid invoice number");
        }
    }
}
Ziel-Code
import org.junit.jupiter.api.BeforeEach;

class OrderServiceTest {
    @BeforeEach
    void createsInvoiceNumber() {
        org.junit.jupiter.api.Assertions.assertTrue("INV-42".startsWith("INV-"));
    }
}

a462: Nach jedem Test aufräumen

Englischer technischer Begriff
JUnit After Each
Annotation
@AfterEach
Import/Package
org.junit.jupiter.api
Priorität
6/10
Einsatzort
Cleanup
Wichtige Parameter
keine Parameter
Warum wichtig
Räumt Ressourcen auf.
Typischer Fehler
Threads/Tempfiles im Test offen lassen.
Enterprise-Einordnung
Wichtig bei IO/Concurrency Tests.
Ausgangspunkt-Code
class OrderServiceTest {
    void createsInvoiceNumber() {
        if (!"INV-42".startsWith("INV-")) {
            throw new AssertionError("invalid invoice number");
        }
    }
}
Ziel-Code
import org.junit.jupiter.api.AfterEach;

class OrderServiceTest {
    @AfterEach
    void createsInvoiceNumber() {
        org.junit.jupiter.api.Assertions.assertTrue("INV-42".startsWith("INV-"));
    }
}

a463: Tests verschachteln

Englischer technischer Begriff
JUnit Nested Tests
Annotation
@Nested
Import/Package
org.junit.jupiter.api
Priorität
5/10
Einsatzort
Szenario-Struktur
Wichtige Parameter
keine Parameter
Warum wichtig
Gruppiert Tests lesbar.
Typischer Fehler
Zu tiefe Verschachtelung.
Enterprise-Einordnung
Hilft bei Fachregeln.
Ausgangspunkt-Code
class OrderServiceTest {
    void createsInvoiceNumber() {
        if (!"INV-42".startsWith("INV-")) {
            throw new AssertionError("invalid invoice number");
        }
    }
}
Ziel-Code
import org.junit.jupiter.api.Nested;

@Nested
class OrderServiceTest {
    @org.junit.jupiter.api.Test
    void createsInvoiceNumber() {
        org.junit.jupiter.api.Assertions.assertTrue("INV-42".startsWith("INV-"));
    }
}

a464: Testtag setzen

Englischer technischer Begriff
JUnit Tag
Annotation
@Tag
Import/Package
org.junit.jupiter.api
Priorität
5/10
Einsatzort
Testselektion
Wichtige Parameter
value
Warum wichtig
Markiert Testkategorie.
Typischer Fehler
Tags ohne CI-Konvention.
Enterprise-Einordnung
Nützlich für Build-Pipelines.
Ausgangspunkt-Code
class OrderServiceTest {
    void createsInvoiceNumber() {
        if (!"INV-42".startsWith("INV-")) {
            throw new AssertionError("invalid invoice number");
        }
    }
}
Ziel-Code
import org.junit.jupiter.api.Tag;

class OrderServiceTest {
    @Tag("integration")
    void createsInvoiceNumber() {
        org.junit.jupiter.api.Assertions.assertTrue("INV-42".startsWith("INV-"));
    }
}

a465: Lesbaren Testnamen setzen

Englischer technischer Begriff
JUnit Display Name
Annotation
@DisplayName
Import/Package
org.junit.jupiter.api
Priorität
5/10
Einsatzort
Tests
Wichtige Parameter
value
Warum wichtig
Verbessert Reports.
Typischer Fehler
DisplayName statt klarer Teststruktur.
Enterprise-Einordnung
Gut für Lern- und Auditberichte.
Ausgangspunkt-Code
class OrderServiceTest {
    void createsInvoiceNumber() {
        if (!"INV-42".startsWith("INV-")) {
            throw new AssertionError("invalid invoice number");
        }
    }
}
Ziel-Code
import org.junit.jupiter.api.DisplayName;

class OrderServiceTest {
    @DisplayName("rejects negative invoice amount")
    void createsInvoiceNumber() {
        org.junit.jupiter.api.Assertions.assertTrue("INV-42".startsWith("INV-"));
    }
}

a466: Timeout für Test setzen

Englischer technischer Begriff
JUnit Timeout
Annotation
@Timeout
Import/Package
org.junit.jupiter.api
Priorität
8/10
Einsatzort
Concurrency Tests
Wichtige Parameter
value; unit; threadMode
Warum wichtig
Verhindert hängende Tests.
Typischer Fehler
Thread.sleep ohne Timeout.
Enterprise-Einordnung
Pflicht bei nebenläufigen Tests.
Ausgangspunkt-Code
class OrderServiceTest {
    void createsInvoiceNumber() {
        if (!"INV-42".startsWith("INV-")) {
            throw new AssertionError("invalid invoice number");
        }
    }
}
Ziel-Code
import org.junit.jupiter.api.Timeout;

class OrderServiceTest {
    @Timeout(value = 2, unit = TimeUnit.SECONDS)
    void createsInvoiceNumber() {
        org.junit.jupiter.api.Assertions.assertTrue("INV-42".startsWith("INV-"));
    }
}

a467: Wiederholten Test definieren

Englischer technischer Begriff
JUnit Repeated Test
Annotation
@RepeatedTest
Import/Package
org.junit.jupiter.api
Priorität
6/10
Einsatzort
Race-Condition Tests
Wichtige Parameter
value; name; failureThreshold
Warum wichtig
Erhöht Chance seltene Fehler zu sehen.
Typischer Fehler
Flaky Tests ohne Diagnose bauen.
Enterprise-Einordnung
Nützlich ergänzend, nicht allein ausreichend.
Ausgangspunkt-Code
class OrderServiceTest {
    void createsInvoiceNumber() {
        if (!"INV-42".startsWith("INV-")) {
            throw new AssertionError("invalid invoice number");
        }
    }
}
Ziel-Code
import org.junit.jupiter.api.RepeatedTest;

class OrderServiceTest {
    @RepeatedTest(value = 20, failureThreshold = 1)
    void createsInvoiceNumber() {
        org.junit.jupiter.api.Assertions.assertTrue("INV-42".startsWith("INV-"));
    }
}

a468: Mockito Mock Feld definieren

Englischer technischer Begriff
Mockito Mock
Annotation
@Mock
Import/Package
org.mockito
Priorität
7/10
Einsatzort
Unit Tests
Wichtige Parameter
answer; name; strictness
Warum wichtig
Erzeugt Testdouble.
Typischer Fehler
Alles mocken, auch Value Objects.
Enterprise-Einordnung
Gut für Port-Isolation.
Ausgangspunkt-Code
class OrderServiceTest {
    void createsInvoiceNumber() {
        if (!"INV-42".startsWith("INV-")) {
            throw new AssertionError("invalid invoice number");
        }
    }
}
Ziel-Code
import org.mockito.Mock;

class OrderServiceTest {
    @Mock(name = "paymentGateway")
    PaymentGateway paymentGateway;

    @org.junit.jupiter.api.Test
    void testDoubleIsAvailable() {
        org.junit.jupiter.api.Assertions.assertNotNull(paymentGateway);
    }
}

a469: Mocks in Klasse injizieren

Englischer technischer Begriff
Mockito Inject Mocks
Annotation
@InjectMocks
Import/Package
org.mockito
Priorität
6/10
Einsatzort
Service Tests
Wichtige Parameter
keine Parameter
Warum wichtig
Injiziert Mocks in Subject.
Typischer Fehler
Komplexe Spring DI im Unit Test nachbauen.
Enterprise-Einordnung
Nützlich für kleine Tests.
Ausgangspunkt-Code
class OrderServiceTest {
    void createsInvoiceNumber() {
        if (!"INV-42".startsWith("INV-")) {
            throw new AssertionError("invalid invoice number");
        }
    }
}
Ziel-Code
import org.mockito.InjectMocks;

class OrderServiceTest {
    @InjectMocks
    PaymentGateway paymentGateway;

    @org.junit.jupiter.api.Test
    void testDoubleIsAvailable() {
        org.junit.jupiter.api.Assertions.assertNotNull(paymentGateway);
    }
}

a470: Argumente capturen

Englischer technischer Begriff
Mockito Argument Captor
Annotation
@Captor
Import/Package
org.mockito
Priorität
6/10
Einsatzort
Interaction Tests
Wichtige Parameter
keine Parameter
Warum wichtig
Erfasst übergebene Werte.
Typischer Fehler
Interaktionsdetails übertesten.
Enterprise-Einordnung
Gut für Event/Outbox Prüfung.
Ausgangspunkt-Code
class OrderServiceTest {
    void createsInvoiceNumber() {
        if (!"INV-42".startsWith("INV-")) {
            throw new AssertionError("invalid invoice number");
        }
    }
}
Ziel-Code
import org.mockito.Captor;

class OrderServiceTest {
    @Captor
    PaymentGateway paymentGateway;

    @org.junit.jupiter.api.Test
    void testDoubleIsAvailable() {
        org.junit.jupiter.api.Assertions.assertNotNull(paymentGateway);
    }
}

a471: Mockito Extension aktivieren

Englischer technischer Begriff
Mockito JUnit Extension
Annotation
@MockitoExtension
Import/Package
org.mockito.junit.jupiter
Priorität
7/10
Einsatzort
JUnit/Mockito Tests
Wichtige Parameter
keine Parameter
Warum wichtig
Initialisiert Mockito Annotationen.
Typischer Fehler
Mocks manuell unvollständig initialisieren.
Enterprise-Einordnung
Standard für Unit Tests.
Ausgangspunkt-Code
class OrderServiceTest {
    void createsInvoiceNumber() {
        if (!"INV-42".startsWith("INV-")) {
            throw new AssertionError("invalid invoice number");
        }
    }
}
Ziel-Code
import org.mockito.junit.jupiter.MockitoExtension;

@MockitoExtension
class OrderServiceTest {
    @org.junit.jupiter.api.Test
    void createsInvoiceNumber() {
        org.junit.jupiter.api.Assertions.assertTrue("INV-42".startsWith("INV-"));
    }
}

a472: Spring Boot Integration Test

Englischer technischer Begriff
Spring Boot Test
Annotation
@SpringBootTest
Import/Package
org.springframework.boot.test.context
Priorität
7/10
Einsatzort
Integration Tests
Wichtige Parameter
classes; webEnvironment; properties; args
Warum wichtig
Startet Spring Kontext.
Typischer Fehler
Jeden Unit Test als SpringBootTest ausführen.
Enterprise-Einordnung
Für echte Integrationsschnitte.
Ausgangspunkt-Code
class OrderServiceTest {
    void createsInvoiceNumber() {
        if (!"INV-42".startsWith("INV-")) {
            throw new AssertionError("invalid invoice number");
        }
    }
}
Ziel-Code
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class OrderServiceTest {
    @org.junit.jupiter.api.Test
    void createsInvoiceNumber() {
        org.junit.jupiter.api.Assertions.assertTrue("INV-42".startsWith("INV-"));
    }
}

a473: MVC Slice Test

Englischer technischer Begriff
Spring Web MVC Test
Annotation
@WebMvcTest
Import/Package
org.springframework.boot.test.autoconfigure.web.servlet
Priorität
7/10
Einsatzort
Controller Tests
Wichtige Parameter
controllers; properties; excludeAutoConfiguration
Warum wichtig
Startet Web Slice.
Typischer Fehler
Service/Repository unbeabsichtigt mitladen.
Enterprise-Einordnung
Schnellere API Tests.
Ausgangspunkt-Code
class OrderServiceTest {
    void createsInvoiceNumber() {
        if (!"INV-42".startsWith("INV-")) {
            throw new AssertionError("invalid invoice number");
        }
    }
}
Ziel-Code
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;

@WebMvcTest(controllers = OrderController.class)
class OrderServiceTest {
    @org.junit.jupiter.api.Test
    void createsInvoiceNumber() {
        org.junit.jupiter.api.Assertions.assertTrue("INV-42".startsWith("INV-"));
    }
}

a474: JPA Slice Test

Englischer technischer Begriff
Spring Data JPA Test
Annotation
@DataJpaTest
Import/Package
org.springframework.boot.test.autoconfigure.orm.jpa
Priorität
7/10
Einsatzort
Repository Tests
Wichtige Parameter
properties; showSql; bootstrapMode
Warum wichtig
Startet Persistenz Slice.
Typischer Fehler
Produktive Datenbank versehentlich treffen.
Enterprise-Einordnung
Gut für Mapping- und Querytests.
Ausgangspunkt-Code
class OrderServiceTest {
    void createsInvoiceNumber() {
        if (!"INV-42".startsWith("INV-")) {
            throw new AssertionError("invalid invoice number");
        }
    }
}
Ziel-Code
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;

@DataJpaTest(showSql = false)
class OrderServiceTest {
    @org.junit.jupiter.api.Test
    void createsInvoiceNumber() {
        org.junit.jupiter.api.Assertions.assertTrue("INV-42".startsWith("INV-"));
    }
}

a475: Dynamische Test Properties setzen

Englischer technischer Begriff
Spring Dynamic Property Source
Annotation
@DynamicPropertySource
Import/Package
org.springframework.test.context
Priorität
8/10
Einsatzort
Testcontainers Config
Wichtige Parameter
keine Parameter; Methode erhält DynamicPropertyRegistry
Warum wichtig
Setzt Ports/URLs zur Laufzeit.
Typischer Fehler
Container-Port hart kodieren.
Enterprise-Einordnung
Zentral bei Docker-basierten Tests.
Ausgangspunkt-Code
class OrderServiceTest {
    void createsInvoiceNumber() {
        if (!"INV-42".startsWith("INV-")) {
            throw new AssertionError("invalid invoice number");
        }
    }
}
Ziel-Code
import org.springframework.test.context.DynamicPropertySource;

class OrderServiceTest {
    @DynamicPropertySource
    void createsInvoiceNumber() {
        org.junit.jupiter.api.Assertions.assertTrue("INV-42".startsWith("INV-"));
    }
}

a476: SQL vor/nach Test ausführen

Englischer technischer Begriff
Spring SQL Test Data
Annotation
@Sql
Import/Package
org.springframework.test.context.jdbc
Priorität
6/10
Einsatzort
DB Integration Tests
Wichtige Parameter
scripts; statements; executionPhase; config
Warum wichtig
Bereitet DB-Zustand vor.
Typischer Fehler
Tests abhängig von Reihenfolge machen.
Enterprise-Einordnung
Nützlich für Repository-Szenarien.
Ausgangspunkt-Code
class OrderServiceTest {
    void createsInvoiceNumber() {
        if (!"INV-42".startsWith("INV-")) {
            throw new AssertionError("invalid invoice number");
        }
    }
}
Ziel-Code
import org.springframework.test.context.jdbc.Sql;

class OrderServiceTest {
    @Sql(scripts = "/testdata/orders.sql")
    void createsInvoiceNumber() {
        org.junit.jupiter.api.Assertions.assertTrue("INV-42".startsWith("INV-"));
    }
}

a477: Testcontainers aktivieren

Englischer technischer Begriff
Testcontainers JUnit Integration
Annotation
@Testcontainers
Import/Package
org.testcontainers.junit.jupiter
Priorität
8/10
Einsatzort
Integration Tests
Wichtige Parameter
disabledWithoutDocker; parallel
Warum wichtig
Aktiviert Container Lifecycle.
Typischer Fehler
Docker-Verfügbarkeit in CI nicht beachten.
Enterprise-Einordnung
Realistische Infrastrukturtests.
Ausgangspunkt-Code
class OrderServiceTest {
    void createsInvoiceNumber() {
        if (!"INV-42".startsWith("INV-")) {
            throw new AssertionError("invalid invoice number");
        }
    }
}
Ziel-Code
import org.testcontainers.junit.jupiter.Testcontainers;

@Testcontainers(disabledWithoutDocker = true)
class OrderServiceTest {
    @org.junit.jupiter.api.Test
    void createsInvoiceNumber() {
        org.junit.jupiter.api.Assertions.assertTrue("INV-42".startsWith("INV-"));
    }
}

a478: Container Feld markieren

Englischer technischer Begriff
Testcontainers Container
Annotation
@Container
Import/Package
org.testcontainers.junit.jupiter
Priorität
8/10
Einsatzort
DB/Broker Container
Wichtige Parameter
keine Parameter
Warum wichtig
Verwaltet Container-Lifecycle.
Typischer Fehler
Container pro Test ohne Grund neu starten.
Enterprise-Einordnung
Wichtig für schnelle Integration Tests.
Ausgangspunkt-Code
class OrderServiceTest {
    void createsInvoiceNumber() {
        if (!"INV-42".startsWith("INV-")) {
            throw new AssertionError("invalid invoice number");
        }
    }
}
Ziel-Code
import org.testcontainers.junit.jupiter.Container;

class OrderServiceTest {
    @Container
    PaymentGateway paymentGateway;

    @org.junit.jupiter.api.Test
    void testDoubleIsAvailable() {
        org.junit.jupiter.api.Assertions.assertNotNull(paymentGateway);
    }
}

a479: Nebenläufigen Test mit ResourceLock schützen

Englischer technischer Begriff
JUnit Resource Lock
Annotation
@ResourceLock
Import/Package
org.junit.jupiter.api.parallel
Priorität
6/10
Einsatzort
parallele Tests
Wichtige Parameter
value; mode
Warum wichtig
Schützt gemeinsam genutzte Ressource.
Typischer Fehler
Parallel Tests auf gleicher DB ohne Lock.
Enterprise-Einordnung
Wichtig bei CI Parallelisierung.
Ausgangspunkt-Code
class OrderServiceTest {
    void createsInvoiceNumber() {
        if (!"INV-42".startsWith("INV-")) {
            throw new AssertionError("invalid invoice number");
        }
    }
}
Ziel-Code
import org.junit.jupiter.api.parallel.ResourceLock;

class OrderServiceTest {
    @ResourceLock(value = "order-db", mode = ResourceAccessMode.READ_WRITE)
    void createsInvoiceNumber() {
        org.junit.jupiter.api.Assertions.assertTrue("INV-42".startsWith("INV-"));
    }
}

a480: TestSecurity gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Quarkus Annotation
Annotation
@TestSecurity
Import/Package
io.quarkus.test.security
Priorität
5/10
Einsatzort
Quarkus Bean, Test oder Build-Zeit
Wichtige Parameter
user; roles
Warum wichtig
Steuert Build-Time- und Testverhalten gezielt.
Typischer Fehler
Build-Time und Runtime-Konfiguration verwechseln.
Enterprise-Einordnung
Wichtig fuer Quarkus und Native-Image-Projekte.
Ausgangspunkt-Code
public class InvoiceResource {
    public String read(String invoiceId) { return invoiceId; }
}
Ziel-Code
import jakarta.ws.rs.*;
import org.eclipse.microprofile.openapi.annotations.*;
import org.eclipse.microprofile.openapi.annotations.info.*;
import org.eclipse.microprofile.openapi.annotations.media.*;
import org.eclipse.microprofile.openapi.annotations.responses.*;
import org.eclipse.microprofile.rest.client.inject.*;
import org.eclipse.microprofile.health.*;
import io.smallrye.config.*;
import io.quarkus.test.security.*;

@Path("/invoices")

public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    @TestSecurity(user = "aydinsude", roles = {"BILLING_ADMIN"})
    public String read(@PathParam("invoiceId") String invoiceId) { return invoiceId; }
}

a481: TestHTTPEndpoint gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Quarkus Annotation
Annotation
@TestHTTPEndpoint
Import/Package
io.quarkus.test.common.http
Priorität
5/10
Einsatzort
Quarkus Bean, Test oder Build-Zeit
Wichtige Parameter
value
Warum wichtig
Steuert Build-Time- und Testverhalten gezielt.
Typischer Fehler
Build-Time und Runtime-Konfiguration verwechseln.
Enterprise-Einordnung
Wichtig fuer Quarkus und Native-Image-Projekte.
Ausgangspunkt-Code
public class InvoiceResource {
    public String read(String invoiceId) { return invoiceId; }
}
Ziel-Code
import jakarta.ws.rs.*;
import org.eclipse.microprofile.openapi.annotations.*;
import org.eclipse.microprofile.openapi.annotations.info.*;
import org.eclipse.microprofile.openapi.annotations.media.*;
import org.eclipse.microprofile.openapi.annotations.responses.*;
import org.eclipse.microprofile.rest.client.inject.*;
import org.eclipse.microprofile.health.*;
import io.smallrye.config.*;
import io.quarkus.test.security.*;

@Path("/invoices")

public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    @TestHTTPEndpoint(InvoiceResource.class)
    public String read(@PathParam("invoiceId") String invoiceId) { return invoiceId; }
}

a482: TestHTTPResource gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Quarkus Annotation
Annotation
@TestHTTPResource
Import/Package
io.quarkus.test.common.http
Priorität
5/10
Einsatzort
Quarkus Bean, Test oder Build-Zeit
Wichtige Parameter
value; ssl
Warum wichtig
Steuert Build-Time- und Testverhalten gezielt.
Typischer Fehler
Build-Time und Runtime-Konfiguration verwechseln.
Enterprise-Einordnung
Wichtig fuer Quarkus und Native-Image-Projekte.
Ausgangspunkt-Code
public class InvoiceResource {
    public String read(String invoiceId) { return invoiceId; }
}
Ziel-Code
import jakarta.ws.rs.*;
import org.eclipse.microprofile.openapi.annotations.*;
import org.eclipse.microprofile.openapi.annotations.info.*;
import org.eclipse.microprofile.openapi.annotations.media.*;
import org.eclipse.microprofile.openapi.annotations.responses.*;
import org.eclipse.microprofile.rest.client.inject.*;
import org.eclipse.microprofile.health.*;
import io.smallrye.config.*;
import io.quarkus.test.security.*;

@Path("/invoices")

public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    @TestHTTPResource("/invoices")
    public String read(@PathParam("invoiceId") String invoiceId) { return invoiceId; }
}

a483: TestTransaction gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Quarkus Annotation
Annotation
@TestTransaction
Import/Package
io.quarkus.test
Priorität
5/10
Einsatzort
Quarkus Bean, Test oder Build-Zeit
Wichtige Parameter
keine Parameter
Warum wichtig
Steuert Build-Time- und Testverhalten gezielt.
Typischer Fehler
Build-Time und Runtime-Konfiguration verwechseln.
Enterprise-Einordnung
Wichtig fuer Quarkus und Native-Image-Projekte.
Ausgangspunkt-Code
public class InvoiceResource {
    public String read(String invoiceId) { return invoiceId; }
}
Ziel-Code
import jakarta.ws.rs.*;
import org.eclipse.microprofile.openapi.annotations.*;
import org.eclipse.microprofile.openapi.annotations.info.*;
import org.eclipse.microprofile.openapi.annotations.media.*;
import org.eclipse.microprofile.openapi.annotations.responses.*;
import org.eclipse.microprofile.rest.client.inject.*;
import org.eclipse.microprofile.health.*;
import io.smallrye.config.*;
import io.quarkus.test.security.*;

@Path("/invoices")

public class InvoiceResource {
    @GET
    @Path("/{invoiceId}")
    @TestTransaction
    public String read(@PathParam("invoiceId") String invoiceId) { return invoiceId; }
}

a484: BeforeAll gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
JUnit Test Annotation
Annotation
@BeforeAll
Import/Package
org.junit.jupiter.api
Priorität
6/10
Einsatzort
Unit-, Integration- oder Parameterized Test
Wichtige Parameter
keine Parameter
Warum wichtig
Erhöht Testabdeckung und Grenzwertprüfung.
Typischer Fehler
Tests deaktivieren oder Testdaten unlesbar machen.
Enterprise-Einordnung
Wichtig fuer Refactoring-Sicherheit.
Ausgangspunkt-Code
class InvoiceServiceTest {
    void postsInvoice() {
        // test logic is executed by the test framework
    }
}
Ziel-Code
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.springframework.test.context.*;
import org.springframework.boot.test.autoconfigure.web.servlet.*;
import com.tngtech.archunit.junit.*;

class InvoiceServiceTest {
    @Test
    @BeforeAll
    void postsInvoice() {
        Assertions.assertTrue(true);
    }
}

a485: AfterAll gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
JUnit Test Annotation
Annotation
@AfterAll
Import/Package
org.junit.jupiter.api
Priorität
6/10
Einsatzort
Unit-, Integration- oder Parameterized Test
Wichtige Parameter
keine Parameter
Warum wichtig
Erhöht Testabdeckung und Grenzwertprüfung.
Typischer Fehler
Tests deaktivieren oder Testdaten unlesbar machen.
Enterprise-Einordnung
Wichtig fuer Refactoring-Sicherheit.
Ausgangspunkt-Code
class InvoiceServiceTest {
    void postsInvoice() {
        // test logic is executed by the test framework
    }
}
Ziel-Code
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.springframework.test.context.*;
import org.springframework.boot.test.autoconfigure.web.servlet.*;
import com.tngtech.archunit.junit.*;

class InvoiceServiceTest {
    @Test
    @AfterAll
    void postsInvoice() {
        Assertions.assertTrue(true);
    }
}

a486: Disabled gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
JUnit Test Annotation
Annotation
@Disabled
Import/Package
org.junit.jupiter.api
Priorität
6/10
Einsatzort
Unit-, Integration- oder Parameterized Test
Wichtige Parameter
value
Warum wichtig
Erhöht Testabdeckung und Grenzwertprüfung.
Typischer Fehler
Tests deaktivieren oder Testdaten unlesbar machen.
Enterprise-Einordnung
Wichtig fuer Refactoring-Sicherheit.
Ausgangspunkt-Code
class InvoiceServiceTest {
    void postsInvoice() {
        // test logic is executed by the test framework
    }
}
Ziel-Code
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.springframework.test.context.*;
import org.springframework.boot.test.autoconfigure.web.servlet.*;
import com.tngtech.archunit.junit.*;

class InvoiceServiceTest {
    @Test
    @Disabled("blocked by billing migration ticket BILL-431")
    void postsInvoice() {
        Assertions.assertTrue(true);
    }
}

a487: TempDir gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
JUnit Test Annotation
Annotation
@TempDir
Import/Package
org.junit.jupiter.api.io
Priorität
6/10
Einsatzort
Unit-, Integration- oder Parameterized Test
Wichtige Parameter
cleanup
Warum wichtig
Erhöht Testabdeckung und Grenzwertprüfung.
Typischer Fehler
Tests deaktivieren oder Testdaten unlesbar machen.
Enterprise-Einordnung
Wichtig fuer Refactoring-Sicherheit.
Ausgangspunkt-Code
class InvoiceServiceTest {
    void postsInvoice() {
        // test logic is executed by the test framework
    }
}
Ziel-Code
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.springframework.test.context.*;
import org.springframework.boot.test.autoconfigure.web.servlet.*;
import com.tngtech.archunit.junit.*;

class InvoiceServiceTest {
    @Test
    @TempDir
    void postsInvoice() {
        Assertions.assertTrue(true);
    }
}

a488: MethodSource gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
JUnit Test Annotation
Annotation
@MethodSource
Import/Package
org.junit.jupiter.params.provider
Priorität
6/10
Einsatzort
Unit-, Integration- oder Parameterized Test
Wichtige Parameter
value
Warum wichtig
Erhöht Testabdeckung und Grenzwertprüfung.
Typischer Fehler
Tests deaktivieren oder Testdaten unlesbar machen.
Enterprise-Einordnung
Wichtig fuer Refactoring-Sicherheit.
Ausgangspunkt-Code
class InvoiceServiceTest {
    void postsInvoice() {
        // test logic is executed by the test framework
    }
}
Ziel-Code
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.springframework.test.context.*;
import org.springframework.boot.test.autoconfigure.web.servlet.*;
import com.tngtech.archunit.junit.*;

class InvoiceServiceTest {
    @Test
    @MethodSource("invoiceStatusTransitions")
    void postsInvoice() {
        Assertions.assertTrue(true);
    }
}

a489: EnumSource gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
JUnit Test Annotation
Annotation
@EnumSource
Import/Package
org.junit.jupiter.params.provider
Priorität
6/10
Einsatzort
Unit-, Integration- oder Parameterized Test
Wichtige Parameter
value; names; mode
Warum wichtig
Erhöht Testabdeckung und Grenzwertprüfung.
Typischer Fehler
Tests deaktivieren oder Testdaten unlesbar machen.
Enterprise-Einordnung
Wichtig fuer Refactoring-Sicherheit.
Ausgangspunkt-Code
class InvoiceServiceTest {
    void postsInvoice() {
        // test logic is executed by the test framework
    }
}
Ziel-Code
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.springframework.test.context.*;
import org.springframework.boot.test.autoconfigure.web.servlet.*;
import com.tngtech.archunit.junit.*;

class InvoiceServiceTest {
    @Test
    @EnumSource(value = InvoiceStatus.class, names = {"DRAFT", "POSTED"})
    void postsInvoice() {
        Assertions.assertTrue(true);
    }
}

a490: NullSource gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
JUnit Test Annotation
Annotation
@NullSource
Import/Package
org.junit.jupiter.params.provider
Priorität
6/10
Einsatzort
Unit-, Integration- oder Parameterized Test
Wichtige Parameter
keine Parameter
Warum wichtig
Erhöht Testabdeckung und Grenzwertprüfung.
Typischer Fehler
Tests deaktivieren oder Testdaten unlesbar machen.
Enterprise-Einordnung
Wichtig fuer Refactoring-Sicherheit.
Ausgangspunkt-Code
class InvoiceServiceTest {
    void postsInvoice() {
        // test logic is executed by the test framework
    }
}
Ziel-Code
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.springframework.test.context.*;
import org.springframework.boot.test.autoconfigure.web.servlet.*;
import com.tngtech.archunit.junit.*;

class InvoiceServiceTest {
    @Test
    @NullSource
    void postsInvoice() {
        Assertions.assertTrue(true);
    }
}

a491: EmptySource gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
JUnit Test Annotation
Annotation
@EmptySource
Import/Package
org.junit.jupiter.params.provider
Priorität
6/10
Einsatzort
Unit-, Integration- oder Parameterized Test
Wichtige Parameter
keine Parameter
Warum wichtig
Erhöht Testabdeckung und Grenzwertprüfung.
Typischer Fehler
Tests deaktivieren oder Testdaten unlesbar machen.
Enterprise-Einordnung
Wichtig fuer Refactoring-Sicherheit.
Ausgangspunkt-Code
class InvoiceServiceTest {
    void postsInvoice() {
        // test logic is executed by the test framework
    }
}
Ziel-Code
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.springframework.test.context.*;
import org.springframework.boot.test.autoconfigure.web.servlet.*;
import com.tngtech.archunit.junit.*;

class InvoiceServiceTest {
    @Test
    @EmptySource
    void postsInvoice() {
        Assertions.assertTrue(true);
    }
}

a492: NullAndEmptySource gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
JUnit Test Annotation
Annotation
@NullAndEmptySource
Import/Package
org.junit.jupiter.params.provider
Priorität
6/10
Einsatzort
Unit-, Integration- oder Parameterized Test
Wichtige Parameter
keine Parameter
Warum wichtig
Erhöht Testabdeckung und Grenzwertprüfung.
Typischer Fehler
Tests deaktivieren oder Testdaten unlesbar machen.
Enterprise-Einordnung
Wichtig fuer Refactoring-Sicherheit.
Ausgangspunkt-Code
class InvoiceServiceTest {
    void postsInvoice() {
        // test logic is executed by the test framework
    }
}
Ziel-Code
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.springframework.test.context.*;
import org.springframework.boot.test.autoconfigure.web.servlet.*;
import com.tngtech.archunit.junit.*;

class InvoiceServiceTest {
    @Test
    @NullAndEmptySource
    void postsInvoice() {
        Assertions.assertTrue(true);
    }
}

a493: ValueSource gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
JUnit Test Annotation
Annotation
@ValueSource
Import/Package
org.junit.jupiter.params.provider
Priorität
6/10
Einsatzort
Unit-, Integration- oder Parameterized Test
Wichtige Parameter
strings; ints; longs
Warum wichtig
Erhöht Testabdeckung und Grenzwertprüfung.
Typischer Fehler
Tests deaktivieren oder Testdaten unlesbar machen.
Enterprise-Einordnung
Wichtig fuer Refactoring-Sicherheit.
Ausgangspunkt-Code
class InvoiceServiceTest {
    void postsInvoice() {
        // test logic is executed by the test framework
    }
}
Ziel-Code
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.springframework.test.context.*;
import org.springframework.boot.test.autoconfigure.web.servlet.*;
import com.tngtech.archunit.junit.*;

class InvoiceServiceTest {
    @Test
    @ValueSource(strings = {"INV-2026-0001", "INV-2026-9999"})
    void postsInvoice() {
        Assertions.assertTrue(true);
    }
}

a494: CsvFileSource gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
JUnit Test Annotation
Annotation
@CsvFileSource
Import/Package
org.junit.jupiter.params.provider
Priorität
6/10
Einsatzort
Unit-, Integration- oder Parameterized Test
Wichtige Parameter
resources; files; numLinesToSkip
Warum wichtig
Erhöht Testabdeckung und Grenzwertprüfung.
Typischer Fehler
Tests deaktivieren oder Testdaten unlesbar machen.
Enterprise-Einordnung
Wichtig fuer Refactoring-Sicherheit.
Ausgangspunkt-Code
class InvoiceServiceTest {
    void postsInvoice() {
        // test logic is executed by the test framework
    }
}
Ziel-Code
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.springframework.test.context.*;
import org.springframework.boot.test.autoconfigure.web.servlet.*;
import com.tngtech.archunit.junit.*;

class InvoiceServiceTest {
    @Test
    @CsvFileSource(resources = "/invoice-status-cases.csv", numLinesToSkip = 1)
    void postsInvoice() {
        Assertions.assertTrue(true);
    }
}

a495: ArgumentsSource gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
JUnit Test Annotation
Annotation
@ArgumentsSource
Import/Package
org.junit.jupiter.params.provider
Priorität
6/10
Einsatzort
Unit-, Integration- oder Parameterized Test
Wichtige Parameter
value
Warum wichtig
Erhöht Testabdeckung und Grenzwertprüfung.
Typischer Fehler
Tests deaktivieren oder Testdaten unlesbar machen.
Enterprise-Einordnung
Wichtig fuer Refactoring-Sicherheit.
Ausgangspunkt-Code
class InvoiceServiceTest {
    void postsInvoice() {
        // test logic is executed by the test framework
    }
}
Ziel-Code
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.springframework.test.context.*;
import org.springframework.boot.test.autoconfigure.web.servlet.*;
import com.tngtech.archunit.junit.*;

class InvoiceServiceTest {
    @Test
    @ArgumentsSource(InvoiceCommandArguments.class)
    void postsInvoice() {
        Assertions.assertTrue(true);
    }
}

a496: ExtendWith gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
JUnit Test Annotation
Annotation
@ExtendWith
Import/Package
org.junit.jupiter.api.extension
Priorität
6/10
Einsatzort
Unit-, Integration- oder Parameterized Test
Wichtige Parameter
value
Warum wichtig
Erhöht Testabdeckung und Grenzwertprüfung.
Typischer Fehler
Tests deaktivieren oder Testdaten unlesbar machen.
Enterprise-Einordnung
Wichtig fuer Refactoring-Sicherheit.
Ausgangspunkt-Code
class InvoiceServiceTest {
    void postsInvoice() {
        // test logic is executed by the test framework
    }
}
Ziel-Code
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.springframework.test.context.*;
import org.springframework.boot.test.autoconfigure.web.servlet.*;
import com.tngtech.archunit.junit.*;

class InvoiceServiceTest {
    @Test
    @ExtendWith(BillingClockExtension.class)
    void postsInvoice() {
        Assertions.assertTrue(true);
    }
}

a497: AnalyzeClasses gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
ArchUnit Annotation
Annotation
@AnalyzeClasses
Import/Package
com.tngtech.archunit.junit
Priorität
5/10
Einsatzort
Architekturtest
Wichtige Parameter
packages; packagesOf; importOptions
Warum wichtig
Macht Architekturregeln ausführbar.
Typischer Fehler
Regeln nur dokumentieren, nicht testen.
Enterprise-Einordnung
Hilft bei modularen Maven-/Enterprise-Projekten.
Ausgangspunkt-Code
class InvoiceServiceTest {
    void postsInvoice() {
        // test logic is executed by the test framework
    }
}
Ziel-Code
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.springframework.test.context.*;
import org.springframework.boot.test.autoconfigure.web.servlet.*;
import com.tngtech.archunit.junit.*;

@AnalyzeClasses(packages = "com.acme.billing")
class InvoiceServiceTest {
    @Test
    
    void postsInvoice() {
        Assertions.assertTrue(true);
    }
}

a498: ArchTest gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
ArchUnit Annotation
Annotation
@ArchTest
Import/Package
com.tngtech.archunit.junit
Priorität
5/10
Einsatzort
Architekturtest
Wichtige Parameter
keine Parameter
Warum wichtig
Macht Architekturregeln ausführbar.
Typischer Fehler
Regeln nur dokumentieren, nicht testen.
Enterprise-Einordnung
Hilft bei modularen Maven-/Enterprise-Projekten.
Ausgangspunkt-Code
class InvoiceServiceTest {
    void postsInvoice() {
        // test logic is executed by the test framework
    }
}
Ziel-Code
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import org.springframework.test.context.*;
import org.springframework.boot.test.autoconfigure.web.servlet.*;
import com.tngtech.archunit.junit.*;

@ArchTest
class InvoiceServiceTest {
    @Test
    
    void postsInvoice() {
        Assertions.assertTrue(true);
    }
}
Messaging, Batch und Integration22 Einträge

a499: JMS Listener definieren

Englischer technischer Begriff
Spring JMS Listener
Annotation
@JmsListener
Import/Package
org.springframework.jms.annotation
Priorität
8/10
Einsatzort
JMS Consumer
Wichtige Parameter
destination; containerFactory; selector; subscription; concurrency
Warum wichtig
Deklariert Message Consumer.
Typischer Fehler
Listener ohne Idempotenz.
Enterprise-Einordnung
Wichtig bei IBM MQ/JMS Migration.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.jms.annotation.JmsListener;

public class BillingService {
    @JmsListener(destination = "billing.invoice.created", concurrency = "2-8")
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}

a500: JMS Listener aktivieren

Englischer technischer Begriff
Enable JMS
Annotation
@EnableJms
Import/Package
org.springframework.jms.annotation
Priorität
5/10
Einsatzort
Konfiguration
Wichtige Parameter
keine Parameter
Warum wichtig
Aktiviert @JmsListener.
Typischer Fehler
Annotation vergessen und Consumer startet nicht.
Enterprise-Einordnung
Bootstrap-Annotation für Messaging.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.jms.annotation.EnableJms;

@EnableJms
public class BillingApplication {
    public String moduleName() {
        return "billing";
    }
}

a501: Kafka Listener definieren

Englischer technischer Begriff
Spring Kafka Listener
Annotation
@KafkaListener
Import/Package
org.springframework.kafka.annotation
Priorität
8/10
Einsatzort
Kafka Consumer
Wichtige Parameter
topics; groupId; containerFactory; concurrency; id
Warum wichtig
Deklariert Kafka Consumer.
Typischer Fehler
Consumer ohne Fehler-/Retry-/DLQ-Konzept.
Enterprise-Einordnung
Wichtig für Event-driven Architecture.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.kafka.annotation.KafkaListener;

public class BillingService {
    @KafkaListener(topics = "orders", groupId = "billing-service", concurrency = "3")
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}

a502: Payload binden

Englischer technischer Begriff
Spring Messaging Payload
Annotation
@Payload
Import/Package
org.springframework.messaging.handler.annotation
Priorität
6/10
Einsatzort
Message Handler
Wichtige Parameter
required
Warum wichtig
Bindet Nutzdaten.
Typischer Fehler
Rohmessage überall parsen.
Enterprise-Einordnung
Macht Handler Signaturen sauber.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.messaging.handler.annotation.Payload;

public class OrderController {
    public String find(@Payload(required = true) String orderId) {
        return "order-" + orderId;
    }
}

a503: Message Header binden

Englischer technischer Begriff
Spring Messaging Header
Annotation
@Header
Import/Package
org.springframework.messaging.handler.annotation
Priorität
7/10
Einsatzort
Message Handler
Wichtige Parameter
name/value; required; defaultValue
Warum wichtig
Bindet Metadaten.
Typischer Fehler
Korrelation aus Payload erraten.
Enterprise-Einordnung
Wichtig für Tracing und Audit.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.messaging.handler.annotation.Header;

public class OrderController {
    public String find(@Header(name = "correlationId", required = false) String orderId) {
        return "order-" + orderId;
    }
}

a504: Antwort-Ziel setzen

Englischer technischer Begriff
Spring Messaging Send To
Annotation
@SendTo
Import/Package
org.springframework.messaging.handler.annotation
Priorität
4/10
Einsatzort
Request/Reply Messaging
Wichtige Parameter
value
Warum wichtig
Deklariert Antwortdestination.
Typischer Fehler
Request/Reply statt Eventfluss missbrauchen.
Enterprise-Einordnung
Nützlich bei Legacy-Integrationen.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.messaging.handler.annotation.SendTo;

public class BillingService {
    @SendTo("billing.invoice.reply")
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}

a505: Batch Processing aktivieren

Englischer technischer Begriff
Spring Batch Enable Batch Processing
Annotation
@EnableBatchProcessing
Import/Package
org.springframework.batch.core.configuration.annotation
Priorität
5/10
Einsatzort
Batch-Konfiguration
Wichtige Parameter
dataSourceRef; transactionManagerRef; modular
Warum wichtig
Aktiviert Batch-Infrastruktur.
Typischer Fehler
Batch ohne Restart-/JobRepository-Konzept.
Enterprise-Einordnung
Relevant bei Java-Enterprise Batchjobs.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;

@EnableBatchProcessing
public class BillingApplication {
    public String moduleName() {
        return "billing";
    }
}

a506: Step Scope verwenden

Englischer technischer Begriff
Spring Batch Step Scope
Annotation
@StepScope
Import/Package
org.springframework.batch.core.configuration.annotation
Priorität
7/10
Einsatzort
Reader/Processor/Writer Beans
Wichtige Parameter
keine Parameter
Warum wichtig
Bindet Bean an Step-Ausführung.
Typischer Fehler
Jobparameter in Singleton Bean halten.
Enterprise-Einordnung
Wichtig für restartfähige Jobs.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.batch.core.configuration.annotation.StepScope;

public class BillingService {
    @StepScope
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}

a507: Job Scope verwenden

Englischer technischer Begriff
Spring Batch Job Scope
Annotation
@JobScope
Import/Package
org.springframework.batch.core.configuration.annotation
Priorität
6/10
Einsatzort
Job-nahe Beans
Wichtige Parameter
keine Parameter
Warum wichtig
Bindet Bean an Job-Ausführung.
Typischer Fehler
Mutable Jobdaten global halten.
Enterprise-Einordnung
Nützlich für Jobparameter.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.batch.core.configuration.annotation.JobScope;

public class BillingService {
    @JobScope
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}

a508: Kafka Handler für mehrere Payloads

Englischer technischer Begriff
Kafka Handler
Annotation
@KafkaHandler
Import/Package
org.springframework.kafka.annotation
Priorität
5/10
Einsatzort
Class-level KafkaListener
Wichtige Parameter
isDefault
Warum wichtig
Routet Payload-Typen.
Typischer Fehler
Mehrere Handler ohne Default bei unbekanntem Typ.
Enterprise-Einordnung
Nur bei polymorphen Nachrichten sinnvoll.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.kafka.annotation.KafkaHandler;

public class BillingService {
    @KafkaHandler(isDefault = true)
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}

a509: MessageMapping gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@MessageMapping
Import/Package
org.springframework.messaging.handler.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
value
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @MessageMapping("/invoice/status")
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a510: SubscribeMapping gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@SubscribeMapping
Import/Package
org.springframework.messaging.simp.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
value
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @SubscribeMapping("/invoice/summary")
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a511: DestinationVariable gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@DestinationVariable
Import/Package
org.springframework.messaging.handler.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
value
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @DestinationVariable("tenantId")
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a512: SendToUser gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Spring Enterprise Annotation
Annotation
@SendToUser
Import/Package
org.springframework.messaging.simp.annotation
Priorität
7/10
Einsatzort
Spring Bean, Controller, Config oder Service
Wichtige Parameter
value; broadcast
Warum wichtig
Macht Spring-Verhalten deklarativ und überprüfbar.
Typischer Fehler
Proxy-, Scan- oder Lifecycle-Regeln nicht beachten.
Enterprise-Einordnung
Relevant fuer Spring Boot Enterprise-Services.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.context.annotation.*;
import org.springframework.cache.annotation.*;
import org.springframework.transaction.event.*;
import org.springframework.security.access.prepost.*;
import org.springframework.data.annotation.*;

@Service

public class BillingService {
    @SendToUser("/queue/invoice-result")
    public String postInvoice(String invoiceId) { return "posted-" + invoiceId; }
}

a513: Incoming gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Reactive Messaging Annotation
Annotation
@Incoming
Import/Package
org.eclipse.microprofile.reactive.messaging
Priorität
7/10
Einsatzort
Channel, Processor oder Emitter
Wichtige Parameter
value
Warum wichtig
Macht Event-Flüsse und Backpressure-Regeln sichtbar.
Typischer Fehler
Ack, Ordering und Overflow nicht definieren.
Enterprise-Einordnung
Zentral fuer Event-Driven Architecture.
Ausgangspunkt-Code
public class InvoiceEventProcessor {
    public String process(String invoiceId) { return "posted-" + invoiceId; }
}
Ziel-Code
import org.eclipse.microprofile.reactive.messaging.*;
import io.smallrye.reactive.messaging.kafka.*;
import io.micrometer.observation.annotation.*;
import io.micrometer.tracing.annotation.*;
import io.github.resilience4j.ratelimiter.annotation.*;
import io.github.resilience4j.timelimiter.annotation.*;
import java.util.concurrent.*;

public class InvoiceEventProcessor {
    @Incoming("invoice-created")
    public CompletableFuture<String> process(String invoiceId) {
        return CompletableFuture.completedFuture("posted-" + invoiceId);
    }
}

a514: Outgoing gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Reactive Messaging Annotation
Annotation
@Outgoing
Import/Package
org.eclipse.microprofile.reactive.messaging
Priorität
7/10
Einsatzort
Channel, Processor oder Emitter
Wichtige Parameter
value
Warum wichtig
Macht Event-Flüsse und Backpressure-Regeln sichtbar.
Typischer Fehler
Ack, Ordering und Overflow nicht definieren.
Enterprise-Einordnung
Zentral fuer Event-Driven Architecture.
Ausgangspunkt-Code
public class InvoiceEventProcessor {
    public String process(String invoiceId) { return "posted-" + invoiceId; }
}
Ziel-Code
import org.eclipse.microprofile.reactive.messaging.*;
import io.smallrye.reactive.messaging.kafka.*;
import io.micrometer.observation.annotation.*;
import io.micrometer.tracing.annotation.*;
import io.github.resilience4j.ratelimiter.annotation.*;
import io.github.resilience4j.timelimiter.annotation.*;
import java.util.concurrent.*;

public class InvoiceEventProcessor {
    @Outgoing("invoice-posted")
    public CompletableFuture<String> process(String invoiceId) {
        return CompletableFuture.completedFuture("posted-" + invoiceId);
    }
}

a515: Acknowledgment gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Reactive Messaging Annotation
Annotation
@Acknowledgment
Import/Package
org.eclipse.microprofile.reactive.messaging
Priorität
7/10
Einsatzort
Channel, Processor oder Emitter
Wichtige Parameter
value
Warum wichtig
Macht Event-Flüsse und Backpressure-Regeln sichtbar.
Typischer Fehler
Ack, Ordering und Overflow nicht definieren.
Enterprise-Einordnung
Zentral fuer Event-Driven Architecture.
Ausgangspunkt-Code
public class InvoiceEventProcessor {
    public String process(String invoiceId) { return "posted-" + invoiceId; }
}
Ziel-Code
import org.eclipse.microprofile.reactive.messaging.*;
import io.smallrye.reactive.messaging.kafka.*;
import io.micrometer.observation.annotation.*;
import io.micrometer.tracing.annotation.*;
import io.github.resilience4j.ratelimiter.annotation.*;
import io.github.resilience4j.timelimiter.annotation.*;
import java.util.concurrent.*;

public class InvoiceEventProcessor {
    @Acknowledgment(Acknowledgment.Strategy.POST_PROCESSING)
    public CompletableFuture<String> process(String invoiceId) {
        return CompletableFuture.completedFuture("posted-" + invoiceId);
    }
}

a516: Broadcast gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Reactive Messaging Annotation
Annotation
@Broadcast
Import/Package
org.eclipse.microprofile.reactive.messaging
Priorität
7/10
Einsatzort
Channel, Processor oder Emitter
Wichtige Parameter
value
Warum wichtig
Macht Event-Flüsse und Backpressure-Regeln sichtbar.
Typischer Fehler
Ack, Ordering und Overflow nicht definieren.
Enterprise-Einordnung
Zentral fuer Event-Driven Architecture.
Ausgangspunkt-Code
public class InvoiceEventProcessor {
    public String process(String invoiceId) { return "posted-" + invoiceId; }
}
Ziel-Code
import org.eclipse.microprofile.reactive.messaging.*;
import io.smallrye.reactive.messaging.kafka.*;
import io.micrometer.observation.annotation.*;
import io.micrometer.tracing.annotation.*;
import io.github.resilience4j.ratelimiter.annotation.*;
import io.github.resilience4j.timelimiter.annotation.*;
import java.util.concurrent.*;

public class InvoiceEventProcessor {
    @Broadcast
    public CompletableFuture<String> process(String invoiceId) {
        return CompletableFuture.completedFuture("posted-" + invoiceId);
    }
}

a517: Channel gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Reactive Messaging Annotation
Annotation
@Channel
Import/Package
org.eclipse.microprofile.reactive.messaging
Priorität
7/10
Einsatzort
Channel, Processor oder Emitter
Wichtige Parameter
value
Warum wichtig
Macht Event-Flüsse und Backpressure-Regeln sichtbar.
Typischer Fehler
Ack, Ordering und Overflow nicht definieren.
Enterprise-Einordnung
Zentral fuer Event-Driven Architecture.
Ausgangspunkt-Code
public class InvoiceEventProcessor {
    public String process(String invoiceId) { return "posted-" + invoiceId; }
}
Ziel-Code
import org.eclipse.microprofile.reactive.messaging.*;
import io.smallrye.reactive.messaging.kafka.*;
import io.micrometer.observation.annotation.*;
import io.micrometer.tracing.annotation.*;
import io.github.resilience4j.ratelimiter.annotation.*;
import io.github.resilience4j.timelimiter.annotation.*;
import java.util.concurrent.*;

public class InvoiceEventProcessor {
    @Channel("invoice-posted")
    public CompletableFuture<String> process(String invoiceId) {
        return CompletableFuture.completedFuture("posted-" + invoiceId);
    }
}

a518: Merge gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Reactive Messaging Annotation
Annotation
@Merge
Import/Package
org.eclipse.microprofile.reactive.messaging
Priorität
7/10
Einsatzort
Channel, Processor oder Emitter
Wichtige Parameter
value
Warum wichtig
Macht Event-Flüsse und Backpressure-Regeln sichtbar.
Typischer Fehler
Ack, Ordering und Overflow nicht definieren.
Enterprise-Einordnung
Zentral fuer Event-Driven Architecture.
Ausgangspunkt-Code
public class InvoiceEventProcessor {
    public String process(String invoiceId) { return "posted-" + invoiceId; }
}
Ziel-Code
import org.eclipse.microprofile.reactive.messaging.*;
import io.smallrye.reactive.messaging.kafka.*;
import io.micrometer.observation.annotation.*;
import io.micrometer.tracing.annotation.*;
import io.github.resilience4j.ratelimiter.annotation.*;
import io.github.resilience4j.timelimiter.annotation.*;
import java.util.concurrent.*;

public class InvoiceEventProcessor {
    @Merge
    public CompletableFuture<String> process(String invoiceId) {
        return CompletableFuture.completedFuture("posted-" + invoiceId);
    }
}

a519: OnOverflow gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Reactive Messaging Annotation
Annotation
@OnOverflow
Import/Package
org.eclipse.microprofile.reactive.messaging
Priorität
7/10
Einsatzort
Channel, Processor oder Emitter
Wichtige Parameter
value; bufferSize
Warum wichtig
Macht Event-Flüsse und Backpressure-Regeln sichtbar.
Typischer Fehler
Ack, Ordering und Overflow nicht definieren.
Enterprise-Einordnung
Zentral fuer Event-Driven Architecture.
Ausgangspunkt-Code
public class InvoiceEventProcessor {
    public String process(String invoiceId) { return "posted-" + invoiceId; }
}
Ziel-Code
import org.eclipse.microprofile.reactive.messaging.*;
import io.smallrye.reactive.messaging.kafka.*;
import io.micrometer.observation.annotation.*;
import io.micrometer.tracing.annotation.*;
import io.github.resilience4j.ratelimiter.annotation.*;
import io.github.resilience4j.timelimiter.annotation.*;
import java.util.concurrent.*;

public class InvoiceEventProcessor {
    @OnOverflow(value = OnOverflow.Strategy.BUFFER, bufferSize = 256)
    public CompletableFuture<String> process(String invoiceId) {
        return CompletableFuture.completedFuture("posted-" + invoiceId);
    }
}

a520: KafkaKey gezielt im Enterprise-Kontext einsetzen

Englischer technischer Begriff
Reactive Messaging Annotation
Annotation
@KafkaKey
Import/Package
io.smallrye.reactive.messaging.kafka
Priorität
7/10
Einsatzort
Channel, Processor oder Emitter
Wichtige Parameter
keine Parameter
Warum wichtig
Macht Event-Flüsse und Backpressure-Regeln sichtbar.
Typischer Fehler
Ack, Ordering und Overflow nicht definieren.
Enterprise-Einordnung
Zentral fuer Event-Driven Architecture.
Ausgangspunkt-Code
public class InvoiceEventProcessor {
    public String process(String invoiceId) { return "posted-" + invoiceId; }
}
Ziel-Code
import org.eclipse.microprofile.reactive.messaging.*;
import io.smallrye.reactive.messaging.kafka.*;
import io.micrometer.observation.annotation.*;
import io.micrometer.tracing.annotation.*;
import io.github.resilience4j.ratelimiter.annotation.*;
import io.github.resilience4j.timelimiter.annotation.*;
import java.util.concurrent.*;

public class InvoiceEventProcessor {
    @KafkaKey
    public CompletableFuture<String> process(String invoiceId) {
        return CompletableFuture.completedFuture("posted-" + invoiceId);
    }
}
Weitere Enterprise-Annotationen und Plattformgrenzen10 Einträge

a521: Cross-Origin gezielt freigeben

Englischer technischer Begriff
Spring Cross Origin
Annotation
@CrossOrigin
Import/Package
org.springframework.web.bind.annotation
Priorität
6/10
Einsatzort
API Gateway/Browser Clients
Wichtige Parameter
origins; methods; allowedHeaders; exposedHeaders; allowCredentials; maxAge
Warum wichtig
Steuert CORS fein.
Typischer Fehler
* mit Credentials erlauben.
Enterprise-Einordnung
Security-relevant bei Web-Portalen.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.web.bind.annotation.CrossOrigin;

public class BillingService {
    @CrossOrigin(origins = "https://portal.company.example", allowCredentials = "true")
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}

a522: Response Body explizit setzen

Englischer technischer Begriff
Spring Response Body
Annotation
@ResponseBody
Import/Package
org.springframework.web.bind.annotation
Priorität
5/10
Einsatzort
MVC Controller
Wichtige Parameter
keine Parameter
Warum wichtig
Schreibt Rückgabe direkt in Response.
Typischer Fehler
Bei @RestController doppelt/unnötig verwenden.
Enterprise-Einordnung
Relevant in Legacy MVC Migration.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.web.bind.annotation.ResponseBody;

public class BillingService {
    @ResponseBody
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}

a523: Request Header binden

Englischer technischer Begriff
Spring Request Header
Annotation
@RequestHeader
Import/Package
org.springframework.web.bind.annotation
Priorität
7/10
Einsatzort
Controller
Wichtige Parameter
name/value; required; defaultValue
Warum wichtig
Bindet Headerwerte.
Typischer Fehler
Mandantenheader ohne Authentizität prüfen.
Enterprise-Einordnung
Gut für Korrelation.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.web.bind.annotation.RequestHeader;

public class OrderController {
    public String find(@RequestHeader(name = "X-Correlation-Id", required = false) String orderId) {
        return "order-" + orderId;
    }
}

a524: Cookie Wert binden

Englischer technischer Begriff
Spring Cookie Value
Annotation
@CookieValue
Import/Package
org.springframework.web.bind.annotation
Priorität
5/10
Einsatzort
Web Controller
Wichtige Parameter
name/value; required; defaultValue
Warum wichtig
Bindet Cookie.
Typischer Fehler
Security-Entscheidungen allein auf Cookieinhalt stützen.
Enterprise-Einordnung
Eher Web/Legacy relevant.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.web.bind.annotation.CookieValue;

public class OrderController {
    public String find(@CookieValue(name = "SESSION", required = false) String orderId) {
        return "order-" + orderId;
    }
}

a525: Model Attribute binden

Englischer technischer Begriff
Spring Model Attribute
Annotation
@ModelAttribute
Import/Package
org.springframework.web.bind.annotation
Priorität
5/10
Einsatzort
MVC Formulare
Wichtige Parameter
name/value; binding
Warum wichtig
Bindet Formularobjekt.
Typischer Fehler
Form Binding ohne Validierung.
Enterprise-Einordnung
Relevant für JSP/Thymeleaf Modernisierung.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import org.springframework.web.bind.annotation.ModelAttribute;

public class OrderController {
    public String find(@ModelAttribute("searchForm") String orderId) {
        return "order-" + orderId;
    }
}

a526: Exception Mapper registrieren

Englischer technischer Begriff
JAX-RS Exception Mapper Provider
Annotation
@Provider
Import/Package
jakarta.ws.rs.ext
Priorität
8/10
Einsatzort
API Fehlerformat
Wichtige Parameter
keine Parameter
Warum wichtig
Registriert Mapper/Filter.
Typischer Fehler
Jede Resource baut Fehlerantwort selbst.
Enterprise-Einordnung
Wichtig für einheitliches Fehlerformat.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import jakarta.ws.rs.ext.Provider;

@Provider
public class BillingApplication {
    public String moduleName() {
        return "billing";
    }
}

a527: Interceptor Methode für AroundInvoke

Englischer technischer Begriff
Jakarta Around Invoke
Annotation
@AroundInvoke
Import/Package
jakarta.interceptor
Priorität
8/10
Einsatzort
Interceptors
Wichtige Parameter
keine Parameter
Warum wichtig
Definiert Interceptor-Methode.
Typischer Fehler
Fachlogik im Interceptor verstecken.
Enterprise-Einordnung
Gut für Audit/Tracing.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import jakarta.interceptor.AroundInvoke;

public class BillingService {
    @AroundInvoke
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}

a528: Security Rollen deklarieren

Englischer technischer Begriff
Declare Roles
Annotation
@DeclareRoles
Import/Package
jakarta.annotation.security
Priorität
5/10
Einsatzort
Jakarta Security
Wichtige Parameter
value
Warum wichtig
Deklariert bekannte Rollen.
Typischer Fehler
Deklaration mit Berechtigungsmodell verwechseln.
Enterprise-Einordnung
Dokumentiert Rollen im Code.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import jakarta.annotation.security.DeclareRoles;

@DeclareRoles({"BILLING_ADMIN", "AUDITOR"})
public class BillingApplication {
    public String moduleName() {
        return "billing";
    }
}

a529: RunAs Rolle setzen

Englischer technischer Begriff
Run As Role
Annotation
@RunAs
Import/Package
jakarta.annotation.security
Priorität
4/10
Einsatzort
Container Security
Wichtige Parameter
value
Warum wichtig
Führt Komponente mit Rolle aus.
Typischer Fehler
RunAs als Rechteumgehung missbrauchen.
Enterprise-Einordnung
Selten, aber in Legacy-Systemen relevant.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import jakarta.annotation.security.RunAs;

@RunAs("SYSTEM_JOB")
public class BillingApplication {
    public String moduleName() {
        return "billing";
    }
}

a530: Priority für JAX-RS Filter setzen

Englischer technischer Begriff
JAX-RS Priority
Annotation
@Priority
Import/Package
jakarta.annotation
Priorität
7/10
Einsatzort
Filter/Interceptor Reihenfolge
Wichtige Parameter
value
Warum wichtig
Steuert Ausführungsreihenfolge.
Typischer Fehler
Filterreihenfolge zufällig lassen.
Enterprise-Einordnung
Wichtig für Auth, Logging, CORS.
Ausgangspunkt-Code
public class BillingService {
    public String createInvoice(String orderId) {
        return "invoice-for-" + orderId;
    }
}
Ziel-Code
import jakarta.annotation.Priority;

@Priority(Priorities.AUTHENTICATION)
public class BillingApplication {
    public String moduleName() {
        return "billing";
    }
}
⌂ Cockpit