Enterprise Intermédiaire

Spring 7 adopte les annotations JSpecify, rendant non-null la valeur par défaut et réduisant le bruit d'annotations.

✕ 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);
    }
}
Un problème avec ce code ? Dites-le nous.
✂️

Non-null par défaut

@NullMarked rend tous les types non annotés non-nuls, donc seules les exceptions nullables nécessitent une annotation.

🌐

Standard de l'écosystème

Les annotations JSpecify sont un standard multi-framework reconnu par NullAway, Error Prone et les IDEs.

🔍

Outillage plus puissant

Les analyseurs statiques modernes comprennent le modèle de nuls JSpecify et signalent les violations à la compilation.

Ancienne Approche
Spring @NonNull/@Nullable
Approche Moderne
JSpecify @NullMarked
Depuis JDK
17
Difficulté
Intermédiaire
Sécurité contre les nuls dans Spring avec JSpecify
Disponible

Disponible depuis Spring Framework 7.0 (nécessite Java 17+)

Spring 5 et 6 ont introduit leurs propres annotations de sécurité contre les nuls dans le package `org.springframework.lang`. Bien qu'utiles, elles étaient spécifiques au framework et nécessitaient d'annoter chaque élément non-null explicitement. Spring 7 migre vers JSpecify, un standard multi-écosystème pour la sécurité contre les nuls. L'annotation `@NullMarked` au niveau de la classe ou du package déclare que tous les types non annotés sont non-nuls par défaut. Seuls les types réellement nullables nécessitent l'annotation `@Nullable`, réduisant drastiquement la verbosité. Les annotations JSpecify sont reconnues par les principaux outils d'analyse statique comme NullAway, Error Prone et IntelliJ IDEA, apportant un support d'outillage plus riche.

Partager 𝕏 🦋 in