Enterprise Orta

JSpecify ile Spring Null Safety

Spring 7, JSpecify açıklamalarını benimseyerek null olmayan değeri varsayılan yapar ve açıklama gürültüsünü azaltır.

✕ 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);
    }
}
Bu kodda bir sorun mu gördünüz? Bize bildirin.
✂️

Varsayılan olarak null olmayan

@NullMarked, açıklanmamış tüm türleri null olmayan yapar; yalnızca nullable istisnalar açıklama gerektirir.

🌐

Ekosistem standardı

JSpecify açıklamaları, NullAway, Error Prone ve IDE'ler tarafından tanınan çapraz çerçeve standardıdır.

🔍

Daha zengin araç desteği

Modern statik analizörler JSpecify'ın null modelini anlar ve ihlalleri derleme zamanında bildirir.

Eski Yaklaşım
Spring @NonNull/@Nullable
Modern Yaklaşım
JSpecify @NullMarked
JDK'dan itibaren
17
Zorluk
Orta
JSpecify ile Spring Null Safety
Mevcut

Spring Framework 7.0'dan itibaren kullanılabilir (Java 17+ gerektirir)

Spring 5 ve 6, org.springframework.lang paketinde kendi null güvenlik açıklamalarını tanıttı. Yararlı olmakla birlikte bunlar çerçeveye özgüydü ve her null olmayan öğeyi açıkça açıklamayı gerektiriyordu. Spring 7, null güvenliği için çapraz ekosistem standardı olan JSpecify'a geçiş yapıyor. Sınıf veya paket düzeyindeki @NullMarked açıklaması, açıklanmamış tüm türlerin varsayılan olarak null olmayan olduğunu belirtir. Yalnızca gerçekten null olabilecek türlerin @Nullable açıklamasına ihtiyacı vardır; bu da ayrıntıyı önemli ölçüde azaltır. JSpecify açıklamaları NullAway, Error Prone ve IntelliJ IDEA gibi büyük statik analiz araçları tarafından tanınır ve Spring'e özgü açıklamaların sağladığından daha zengin araç desteği sunar.

Paylaş 𝕏 🦋 in