Enterprise Średniozaawansowany

Spring 7 przyjmuje adnotacje JSpecify, czyniąc non-null wartością domyślną i redukując szum adnotacji.

✕ 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);
    }
}
Widzisz problem z tym kodem? Daj nam znać.
✂️

Non-null jako domyślny

@NullMarked sprawia, że wszystkie nieadnotowane typy są non-null, więc tylko wyjątki nullable wymagają adnotacji.

🌐

Standard ekosystemu

Adnotacje JSpecify to standard niezależny od frameworka, rozpoznawany przez NullAway, Error Prone i IDE.

🔍

Bogatsze narzędzia

Nowoczesne analizatory statyczne rozumieją model null JSpecify i raportują naruszenia w czasie kompilacji.

Stare podejście
Spring @NonNull/@Nullable
Nowoczesne podejście
JSpecify @NullMarked
Od JDK
17
Poziom trudności
Średniozaawansowany
Bezpieczeństwo null w Spring z JSpecify
Dostępne

Dostępne od Spring Framework 7.0 (wymaga Java 17+)

Spring 5 i 6 wprowadziły własne adnotacje bezpieczeństwa null w pakiecie org.springframework.lang. Choć użyteczne, były specyficzne dla frameworka i wymagały adnotowania każdego elementu non-null jawnie. Spring 7 migruje do JSpecify, uniwersalnego standardu dla bezpieczeństwa null. Adnotacja @NullMarked na poziomie klasy lub pakietu deklaruje, że wszystkie nieadnotowane typy są domyślnie non-null. Tylko faktycznie nullable typy wymagają adnotacji @Nullable, drastycznie redukując rozwlekłość. Adnotacje JSpecify są rozpoznawane przez główne narzędzia analizy statycznej jak NullAway, Error Prone i IntelliJ IDEA.