Spring 5 core 中的 @NonNull 是个什么鬼?!

简介: 说明在Spring 5的 spring-core jar包中添加了 jsr-305 相关注解。在 Spring 源码中已经被大量使用。如下图:JSR-305介绍诸如 FindBugs、IntelliJ、Checkstyle 和 PMD 这样的静态分析工具在 Java 开发中得到了广泛应用。

说明

Spring 5的 spring-core jar包中添加了 jsr-305 相关注解。在 Spring 源码中已经被大量使用。如下图:

001.png

JSR-305介绍

诸如 FindBugs、IntelliJ、Checkstyle 和 PMD 这样的静态分析工具在 Java 开发中得到了广泛应用。这些工具都很强大,但是有一些共同的问题它们都很难解决。在 API 的设计中,有一些决策是不言而喻的,比如何时值可以为 null,或者何时数字值不能为负。完备的 API 会将这些设计细节记录在 JavaDoc 之中,但是分析工具却无法发现类似细节,从而有可能将其忽略或是导致错误的检测结果。

为了解决这些问题,有些静态分析工具开发人员试图使用注解来定义相关细节。比如 FindBugs 和 IntelliJ 都定义了自己的注解,以表示方法何时返回 null。不过,这两个工具使用的注解有细微不同,也因此有了标准化的需求。由 FindBugs 创建人 Bill Pugh 带领制定的 JSR-305 标准,试图创建一套标准注解供分析工具使用,同时希望允许开发人员根据自己的需要添加额外的注解。当前提案中包括供判断是否为空、正负号、开发语言和线程等方面的众多注解。

更多jsr-305介绍请查看,JSR-305:供检查软件缺陷用的注解

使用场景

由上文的介绍,我们知晓了 jsr-305 的目标:供检查软件缺陷用。方便静态代码检查工具及时查找出潜在的 bug。所以这些注解特别适合基础组件和工具包,增强 IDE 提示,减少潜在 bug
lutool 1.x 中复制了spring 5中的 jsr-305 相关注解到源码中,到 mica - Spring boot 微服务开发核心包 由于依赖的 Spring boot 2.1.x,则直接使用 spring core 中的注解。

使用

添加包级规则

  1. @NonNullFields表示Field不为null。
  2. @NonNullApi表示方法参数返回值不为null。
  3. 对于不想使用包级别不为null,可直接使用@NonNull,使用方式同下文@Nullable

在包下添加package-info.java,内容如下:

@NonNullApi
@NonNullFields
package net.dreamlu.mica.core.utils;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;

添加完该注解后编写代码时编辑器会给出提示,如下图:
002.png

003.png

@Nullable

对于部分可为空的Field方法参数返回值需要使用@Nullable进行标示。

参数可为null

public static boolean isBlank(@Nullable final CharSequence cs) {
    return !StringUtils.hasText(cs);
}

返回值可为null

@Nullable
public static String getCookieVal(HttpServletRequest request, String name) {
    Cookie cookie = getCookie(request, name);
    return cookie != null ? cookie.getValue() : null;
}

属性可为null

@Nullable
private String msg;

开源推荐

目录
相关文章
|
1月前
|
XML Java 数据格式
Spring Core核心类库的功能与应用实践分析
【12月更文挑战第1天】大家好,今天我们来聊聊Spring Core这个强大的核心类库。Spring Core作为Spring框架的基础,提供了控制反转(IOC)和依赖注入(DI)等核心功能,以及企业级功能,如JNDI和定时任务等。通过本文,我们将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring Core,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
56 14
|
安全 Java Spring
Spring Core
Spring Core
|
Java 调度 Spring
spring core
spring core
|
Java Spring
Spring core项目的创建与使用(下)
Spring core项目的创建与使用(下)
|
Java Maven Spring
Spring core项目的创建与使用(上)
Spring core项目的创建与使用(上)
111 0
|
安全 前端开发 Java
SpringCore RCE 1day漏洞复现(NSSCTF Spring Core RCE)
在Spring框架的JDK9版本(及以上版本)中,远程攻击者可在满足特定条件的基础上,通过框架的参数绑定功能获取AccessLogValve对象并诸如恶意字段值,从而触发pipeline机制并 写入任意路径下的文件。
272 0
SpringCore RCE 1day漏洞复现(NSSCTF Spring Core RCE)
|
开发框架 Java .NET
ASP.NET Core微服务之基于Steeltoe使用Spring Cloud Config统一管理配置
本文极简地介绍了一下Spring Cloud Config,并快速构建了一个用于演示的Config Server,然后通过Steeltoe OSS提供的Config客户端将ASP.NET Core与Spring Cloud Config进行集成,最后进行了验证能够正常地从Config Server中获取最新的配置内容。
2133 0
|
XML Java 数据格式
【Spring开发】—— Spring Core
原文:【Spring开发】—— Spring Core 前言   最近由于一些工作的需要,还有自己知识的匮乏再次翻开spring。正好整理了一下相关的知识,弥补了之前对spring的一些错误认知。
1062 0