Хоч Java не дозволяє виражати null-безпеку у своїй системі типів, Spring Framework тепер містить наступні інструкції в пакеті org.springframework.lang, щоб у тебе була змога оголошувати null-безпеку API-інтерфейсів та полів:

  • @Nullable: Анотація, яка вказує, що певний параметр, значення або поле, що повертається може бути null.

  • @NonNull: Анотація, яка вказує на те, що певний параметр, значення або поле, що повертається, не може бути null (не потрібна для параметрів/повертаємих значень і полів, в яких застосовуються анотації @NonNullApi та @NonNullFields відповідно).

  • @NonNullApi: Анотація на рівні пакета, яка оголошує значення, що відрізняється від порожнього (non-null), семантикою за замовчуванням для параметрів і значень, що повертаються.

  • @NonNullFields: Анотація на рівні пакета, яка оголошує значення, що відрізняється від порожнього (non-null), семантикою за замовчуванням для полів.

Spring Framework сам ефективно використовує ці анотації, але вони також можуть бути використані в будь-якому Java-проєкті на основі Spring для оголошення null-безпечних API-інтерфейсів і, за бажанням, null-безпечних полів. Допустимість порожнього (null) значення для аргументів універсального типу, аргументів змінної довжини (varargs) та елементів масиву поки що не підтримуються, але має бути додана до наступного випуску. Актуальну інформацію див. у SPR-15942. Очікується, що оголошення змінних, що допускають порожнє значення, будуть допрацьовувати між випусками Spring Framework, включно з мінорними. Допустимість порожнього значення для типів, що використовуються всередині тіла методу, виходить за межі видимості цієї функції.

Інші поширені бібліотеки, як-от Reactor і Spring Data, містять null-безпечні API-інтерфейси, які використовують аналогічну організацію допустимості порожнього значення, та забезпечують узгоджений загальний досвід роботи для розробників програм на Spring.

Приклади використання

На додаток до надання явного оголошення допустимості порожнього значення для API-інтерфейсу Spring Framework, ці анотації можуть бути використані IDE (наприклад, IDEA або Eclipse) для корисних попереджень, пов'язаних з null-безпекою, що дозволить уникнути NullPointerException під час виконання.

Вони також використовуються для того, щоб зробити API-інтерфейс Spring null-безпечним у проєктах Kotlin, оскільки Kotlin спочатку підтримує null-безпеку. Більш детальну інформацію можна знайти у документації з підтримки Kotlin.

Мета-анотації JSR-305

Анотації Spring мета-анотуються за допомогою анотацій з JSR 305 (не здійснюваний наразі, але поширений JSR). Мета-анотації з JSR-305 дозволяють постачальникам інструментів, таких як IDEA або Kotlin, забезпечувати підтримку null-безпеки в загальному вигляді без необхідності жорстко кодувати підтримку анотацій у Spring.

Немає необхідності і не рекомендується додавати залежність JSR-305 до шляху класів проєкту, щоб користуватися перевагами null-безпечного API-інтерфейсу Spring. Тільки для таких проєктів, як бібліотеки на базі Spring, що використовують анотації null-безпеки у своїй кодовій базі, слід додати com.google.code.findbugs:jsr305:3.0.2 з конфігурацією compileOnly з Gradle або областю видимості provided з Maven, щоб уникнути отримання попереджень про компіляцію.