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.
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);
}
}
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);
}
}
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.
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.