Spring 의 Null-Safety 를 깊이 분석 하 다.
자바 에 서 는 null 의 안전성 을 나타 내 는 형식 을 사용 할 수 없습니다.그러나 Spring Framework 는 현재 org.springframework.lang 패키지 에서 다음 과 같은 설명 을 제공 하여 API 와 필드 의 가용성 을 설명 합 니 다.
@Nullable
:매개 변수,반환 값 또는 필드 를 null 의 주석 으로 지정 할 수 있 습 니 다.@NonNull
:상기 주석 과 달리 지정 한 매개 변수,반환 값 또는 필드 가 null 로 허용 되 지 않 음 을 나타 낸다.(@NonNullApi 와@NonNullFields 에 적용 되 는 인자/반환 값 과 필드 가 필요 없습니다.@NonNullApi
:패키지 등급 의 설명 은 null 을 매개 변수 와 반환 값 으로 하지 않 습 니 다.@NonNullFields
:패키지 등급 의 설명 필드 는 기본적으로 비어 있 지 않 습 니 다@NonNull
@NonNull 주석 은 null-safety 의 모든 주석 에서 가장 중요 한 것 입 니 다.이 주석 을 사용 하여 원 하 는 대상 이 인용 한 모든 곳 에서 빈 제약 이 아 닌 필드,방법 파라미터 또는 방법 으로 값 을 되 돌려 줄 수 있 습 니 다.
예 를 들 어 보 겠 습 니 다.
public class Student {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
if(name != null && name.isEmpty()){
name = null;
}
this.name = name;
}
}
이 코드 는 name 에 대한 검증 에 유효 하지만 결함 이 있 습 니 다.name 이 null 로 설정 되면 name 을 사용 할 때 NullPointer Exception 으로 끝 납 니 다.@NonNull 사용 하기
Spring 의 null-safety 특성 은
idea
또는eclipse
이 잠재 적 인 위협 을 보고 할 수 있 습 니 다.예 를 들 어 우리 가 IDEA 로 속성 에@NonNull 을 더 하면 다음 과 같은 효과 가 나타 납 니 다.이상 하 다.변 함 이 없 잖 아.잠재 적 인 안전 힌트 를 못 봤 잖 아.그 건 네가 아이디어 에 설정 을 하지 않 았 기 때 문 이 야.
안전 검사 설정
만약 당신 도 힌트 가 없다 면 다음 과 같은 방식 으로 안전 검 사 를 설정 할 수 있 습 니 다.
아직 사용 하기 어 려 우 면 오른쪽 configuration annotations 에@NonNull 과@Nullable 이 있 는 jar 가방 을 추가 하 십시오.다음 과 같 습 니 다.
덧붙이다✅ 다음 과 같은 효 과 를 볼 수 있다.
현재 fullName 은@NonNull 주석 에 컴 파 일 러 를 추가 하여 null 값 을 검사 합 니 다!
만약 당신 이 믿 지 않 는 다 면,@NonNull 주석 을 삭제 하고,마 우 스 를 fullName 에 다시 놓 아 도 됩 니 다.이 알림 은 없습니다.
@NonNullFields
@NonNull 주 해 는 null-safety 를 확보 하 는 데 도움 이 됩 니 다.그러나 이 주석 이 모든 필드 를 직접 장식 하면 코드 라 이브 러 리 전체 가 오염 된다.
Spring 은 null 에 허용 되 지 않 는 또 다른 주 해 를 제공 합 니 다.
@NonNullFields
이 설명 은 패키지 단계 에 적합 합 니 다.개발 도구 설명 패키지 의 모든 필드 를 알려 줍 니 다.기본적으로 null 로 사용 할 수 없습니다.Parent 클래스 를 새로 만 들 고 이 클래스 에 속 하 는 패키지 아래 에
package-info.java
라 는 클래스 를 만 듭 니 다.자바 클래스 가 아 닌file
만 들 었 습 니 다.package-info.자바 라 는 이름 입 니 다.다음 과 같 습 니 다.package-info.java
@NonNullFields
package com.nullsafety.demo.pojo;
import org.springframework.lang.NonNullFields;
새 클래스Parent.java
public class Parent {
private String son;
private String age;
private String name;
public void setSon(String son) {
if(son != null && son.isEmpty()){
son = null;
}
this.son = son;
}
public void setAge(String age) {
if(age != null && age.isEmpty()){
age = null;
}
this.age = age;
}
public void setName(String name) {
if(name != null && name.isEmpty()){
name = null;
}
this.name = name;
}
}
package-info.자바 의@NonNullFields
는 Parent 류 의 모든 속성 에 작용 할 수 있 습 니 다.마 우 스 를 임의의 속성 에 두 면 컴 파일 기간 검사 에 대한 알림 이 나타 납 니 다.@Nullable
@NonNull Fields 주석 은 보통@NonNull 보다 좋 습 니 다.모델 을 줄 이 는 데 도움 이 되 기 때 문 입 니 다.그러나 때때로 우 리 는 패키지 등급 이 지정 한 비 null 제약 에서 일부 필드 를 면제 하려 고 할 때
@Nullable
주 해 를 사용 합 니 다.Person.자바,Person.자바 와 pack-info.자바 가 같은 가방 에 있 습 니 다.
public class Person {
@NonNull
private String fullName;
@Nullable
private String nickName;
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
if(nickName != null && nickName.isEmpty()){
nickName = null;
}
this.nickName = nickName;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
if(fullName != null && fullName.isEmpty()){
fullName = null;
}
this.fullName = fullName;
}
}
이 경우 필드 에@NonNullFields 의 의 미 를 덮어 쓰기 위해@Nullable 주석 을 사용 합 니 다.@NonNullApi
@NonNullFields
주석 은 이름 이 보 여 주 는 필드 에 만 적 용 됩 니 다.만약 우리 가 방법의 매개 변수 와 반환 값 에 같은 영향 을 미 치 려 면@NonNullApi 가 필요 합 니 다.configure annotations 에@NonNullApi 와@NonNullFields 를 추가 하고 NonNullApi 를 선택 하 십시오.
@NonNullFields 와 마찬가지 로 package-info.java 에서 정의 해 야 합 니 다
@NonNullApi
package-info.java
@NonNullApi
@NonNullFields
package com.nullsafety.demo.pojo;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;
다음 주석 을 추가 한 효 과 는 다음 과 같 습 니 다.값 을 되 돌 릴 때 컴 파일 기간 의 힌트 를 받 을 수 있 습 니 다.후기:
문장 을 다 보고 나 면 너 는 적어도 이해 해 야 한다.
위 에서 말 한 것 은 편집장 님 께 서 소개 해 주신 Spring 의 Null-Safety 입 니 다.여러분 께 도움 이 되 셨 으 면 좋 겠 습 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.