Enterprise Intermediário

O Spring 7 adota as anotações JSpecify, tornando non-null o padrão e reduzindo o ruído de anotações.

✕ 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);
    }
}
Viu um problema com este código? Nos avise.
✂️

Non-null por padrão

@NullMarked torna todos os tipos não anotados non-null, então apenas exceções nullable precisam de anotação.

🌐

Padrão do ecossistema

Anotações JSpecify são um padrão cross-framework reconhecido por NullAway, Error Prone e IDEs.

🔍

Ferramentas mais ricas

Analisadores estáticos modernos entendem o modelo de null do JSpecify e reportam violações em tempo de compilação.

Abordagem Antiga
Spring @NonNull/@Nullable
Abordagem Moderna
JSpecify @NullMarked
Desde o JDK
17
Dificuldade
Intermediário
Null Safety no Spring com JSpecify
Disponível

Disponível desde o Spring Framework 7.0 (requer Java 17+)

O Spring 5 e 6 introduziram suas próprias anotações de null safety no pacote org.springframework.lang. Embora úteis, eram específicas do framework e exigiam anotar cada elemento non-null explicitamente. O Spring 7 migra para o JSpecify, um padrão cross-ecosystem para null safety. A anotação @NullMarked no nível de classe ou pacote declara que todos os tipos não anotados são non-null por padrão. Apenas tipos realmente nullable precisam da anotação @Nullable, reduzindo drasticamente a verbosidade. As anotações JSpecify são reconhecidas por ferramentas de análise estática como NullAway, Error Prone e IntelliJ IDEA, trazendo suporte de ferramentas mais rico do que as anotações específicas do Spring ofereciam.

Compartilhar 𝕏 🦋 in