使用Spring 的 Null-Safety免受空指针错误


NullPointerExceptions(通常简称为“NPE”)是每个 Java 程序员的噩梦。
我们可以在互联网上找到大量解释如何编写空安全代码的文章。空安全确保我们在代码中添加了适当的检查,以确保对象引用不能为空,或者在对象为空时采取可能的安全措施,毕竟。
由于NullPointerException是运行时异常,因此在代码编译期间很难找出这种情况。Java 的类型系统没有办法快速消除危险的空对象引用。
幸运的是,Spring Framework 提供了一些注释来解决这个确切的问题。在本文中,我们将学习如何使用这些注解来使用Spring Boot编写 null 安全代码。
 
本文附有GitHub 上的一个工作代码示例。
 
Spring中的空安全注释
Spring核心包下org.springframework.lang,有4个这样的注解:

  • @NonNull,
  • @NonNullFields,
  • @Nullable,
  • @NonNullApi.

Eclipse 和 IntelliJ IDEA 等流行的 IDE 可以理解这些注释。他们可以在编译期间警告开发人员潜在的问题。
我们将在本教程中使用 IntelliJ IDEA。让我们通过一些代码示例了解更多信息。
.....
 
如果我们想在构建管道中进行一些自动代码检查,这在某种程度上也是可行的。
SpotBugs(著名但废弃的FindBugs项目的转世)提供了一个 Maven/Gradle 插件,可以检测由于可空性导致的代码异味。让我们看看如何使用它。
对于 Maven 项目,我们需要更新pom.xml以添加SpotBugs Maven 插件
<plugin>
  <groupId>com.github.spotbugs</groupId>
  <artifactId>spotbugs-maven-plugin</artifactId>
  <version>4.5.2.0</version>
  <dependencies>
    <!-- overwrite dependency on spotbugs if you want to specify the version of spotbugs -->
    <dependency>
      <groupId>com.github.spotbugs</groupId>
      <artifactId>spotbugs</artifactId>
      <version>4.5.3</version>
    </dependency>
  </dependencies>
</plugin>

构建项目后,我们可以使用此插件中的以下目标:

  • 目标分析spotbugs目标项目。
  • check目标运行目标并在spotbugs发现任何错误时使构建失败。

Kotlin使用一些注解来推断 Spring API 的可空性。