Enterprise Fortgeschritten

Spring 7 übernimmt JSpecify-Annotationen, macht Non-Null zum Standard und reduziert Annotations-Rauschen.

✕ Spring 5/6
import org.springframework.lang.NonNull;
import org.springframework.lang.Nullable;

public class UserService {

    @Nullable
    public User findById(@NonNull String id) {
        return repository.findById(id).orElse(null);
    }

    @NonNull
    public List<User> findAll() {
        return repository.findAll();
    }

    @NonNull
    public User save(@NonNull User user) {
        return repository.save(user);
    }
}
✓ Spring 7
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;

@NullMarked
public class UserService {

    public @Nullable User findById(String id) {
        return repository.findById(id).orElse(null);
    }

    public List<User> findAll() {
        return repository.findAll();
    }

    public User save(User user) {
        return repository.save(user);
    }
}
Problem mit diesem Code entdeckt? Sag uns Bescheid.
✂️

Non-Null als Standard

@NullMarked macht alle nicht annotierten Typen zu Non-Null, sodass nur nullable Ausnahmen annotiert werden müssen.

🌐

Ökosystem-Standard

JSpecify-Annotationen sind ein framework-übergreifender Standard, der von NullAway, Error Prone und IDEs erkannt wird.

🔍

Umfangreicheres Tooling

Moderne statische Analysatoren verstehen das Null-Modell von JSpecify und melden Verstöße zur Kompilierzeit.

Alter Ansatz
Spring @NonNull/@Nullable
Moderner Ansatz
JSpecify @NullMarked
Seit JDK
17
Schwierigkeitsgrad
Fortgeschritten
Spring Null-Sicherheit mit JSpecify
Verfügbar

Verfügbar seit Spring Framework 7.0 (erfordert Java 17+)

Spring 5 und 6 führten eigene Null-Sicherheits-Annotationen im Paket `org.springframework.lang` ein. Obwohl nützlich, waren diese framework-spezifisch und erforderten die explizite Annotation jedes Non-Null-Elements. Spring 7 migriert zu JSpecify, einem ökosystemübergreifenden Standard für Null-Sicherheit. Die `@NullMarked`-Annotation auf Klassen- oder Paketebene deklariert, dass alle nicht annotierten Typen standardmäßig Non-Null sind. Nur tatsächlich nullable Typen benötigen die `@Nullable`-Annotation, was die Ausführlichkeit drastisch reduziert. JSpecify-Annotationen werden von wichtigen statischen Analysetools wie NullAway, Error Prone und IntelliJ IDEA erkannt und bieten umfangreichere Tooling-Unterstützung als Spring-spezifische Annotationen.

Teilen 𝕏 🦋 in