[[toc]]
Spring Framework 从 2017 年 9 月推出了 5.0.0 正式版,在原来 4 版本基础上做出了大量新的改进。整个 Spring5 框架的代码基于 Java 8,运行时兼容 JDK 9,许多不建议使用的类和方法在代码库中删除。

第一节 JSR305标准相关注解

1、从JSR说起

①JCP

JCP(Java Community Process) 是一个由SUN公司发起的,开放的国际组织。主要由Java开发者以及被授权者组成,负责Java技术规范维护,Java技术发展和更新。
JCP官网地址:https://jcp.org/en/home/index
01.JSP305标准相关注解 - 图1

②JSR

JSR 的全称是:Java Specification Request,意思是 Java 规范提案。谁向谁提案呢?任何人都可以向 JCP (Java Community Process) 提出新增一个标准化技术规范的正式请求。JSR已成为Java界的一个重要标准。登录 JCP 官网可以查看所有 JSR 标准

2、JSR 305

JSR 305: Annotations for Software Defect Detection
This JSR will work to develop standard annotations (such as @NonNull) that can be applied to Java programs to assist tools that detect software defects.
主要功能:使用注解(例如@NonNull等等)协助开发者侦测软件缺陷。
Spring 从 5.0 版本开始支持了 JSR 305 规范中涉及到的相关注解。
package org.springframework.lang;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import javax.annotation.Nonnull;
import javax.annotation.meta.TypeQualifierNickname;

/*
A common Spring annotation to declare that annotated elements cannot be {@code null}.

Leverages JSR-305 meta-annotations to indicate nullability in Java to common
tools with JSR-305 support and used by Kotlin to infer nullability of Spring API.

Should be used at parameter, return value, and field level. Method overrides should
repeat parent {@code @NonNull} annotations unless they behave differently.

Use {@code @NonNullApi} (scope = parameters + return values) and/or {@code @NonNullFields}
(scope = fields) to set the default behavior to non-nullable in order to avoid annotating
your whole codebase with {@code @NonNull}.

@author Sebastien Deleuze
@author Juergen Hoeller
@since 5.0
@see NonNullApi
@see NonNullFields
@see Nullable
/
@Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Nonnull
@TypeQualifierNickname
public @interface NonNull {
}

3、相关注解

注解名称 含义 可标记位置
@Nullable 可以为空 @Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})
@NonNull 不应为空 @Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})
@NonNullFields 在特定包下的字段不应为空 @Target(ElementType.PACKAGE)
@TypeQualifierDefault(ElementType.FIELD)
@NonNullApi 参数和方法返回值不应为空 @Target(ElementType.PACKAGE)
@TypeQualifierDefault({ElementType.METHOD, ElementType.PARAMETER})

回目录 下一节