Aunque Java no le permite expresar seguridad nula en su sistema de tipos, Spring Framework ahora incluye las siguientes anotaciones en el paquete org.springframework.lang para que pueda declarar API y campos en ser nulo seguro:

  • @Nullable: una anotación que indica que un determinado parámetro, valor de retorno o campo puede ser null.

  • @NonNull: una anotación que indica que un parámetro, valor de retorno o campo en particular no puede ser null (no es necesario para parámetros/valores de retorno y campos donde anotaciones se aplican) @NonNullApi y @NonNullFields respectivamente).

  • @NonNullApi: una anotación a nivel de paquete que declara un valor no nulo como la semántica predeterminada para parámetros y valores de retorno.

  • @NonNullFields: una anotación a nivel de paquete que declara un valor no nulo como la semántica predeterminada para los campos.

El propio Spring Framework hace un uso efectivo de estas anotaciones, pero también se pueden usar en cualquier proyecto Java basado en Spring para declarar API seguras para nulos y, opcionalmente, campos seguros para nulos. La capacidad de nulidad para argumentos de tipo genérico, varargs y elementos de matriz aún no se admite, pero se debe agregar en una versión futura. Para obtener la información más reciente, consulte SPR-15942. Se espera que las declaraciones de variables anulables se refinen entre las versiones de Spring Framework, incluidas las menores. La posibilidad de nulos de los tipos utilizados dentro del cuerpo de un método está fuera del alcance de esta función.

Otras bibliotecas comunes, como Reactor y Spring Data, contienen API seguras para nulos que utilizan una organización similar de capacidad de nulos, lo que proporciona una experiencia general consistente para los desarrolladores de aplicaciones en Spring.

Usar ejemplos

Además de proporcionar una declaración explícita de nulidad a la API de Spring Framework, los IDE (como IDEA o Eclipse) pueden usar estas anotaciones para proporcionar advertencias útiles relacionadas con la seguridad de nulos, evitando así NullPointerException en tiempo de ejecución.

También se utilizan para hacer que la API Spring sea segura para nulos en proyectos de Kotlin, ya que Kotlin admite de forma nativa seguridad nula. Puede encontrar más información en la documentación de soporte de Kotlin.

Metaanotaciones JSR-305

Las anotaciones de Spring están metaanotadas utilizando anotaciones de JSR 305 (no implementado por el momento, pero es un JSR ampliamente utilizado). Las metaanotaciones de JSR-305 permiten a los proveedores de herramientas como IDEA o Kotlin brindar soporte para seguridad nula de manera genérica sin tener que codificar el soporte de anotaciones en Spring.

No es necesario ni recomendado agregar una dependencia JSR-305 al classpath de su proyecto para aprovechar la API segura para nulos de Spring. Solo para proyectos como bibliotecas basadas en Spring que usan anotaciones de seguridad nula en su código base, debe agregar com.google.code.findbugs:jsr305:3.0.2 con la configuración compileOnly de Gradle o alcance provided de Maven para evitar advertencias de compilación.