Spring 에서 Null 에 대해 서 잘 모 르 시 는 걸 로 하 겠 습 니 다.
자바 에 서 는 null 의 안전성 을 나타 내 는 형식 을 사용 할 수 없습니다.그러나 Spring Framework 는 현재 org.springframework.lang 패키지 에서 다음 과 같은 설명 을 제공 하여 API 와 필드 의 가용성 을 설명 합 니 다.
Spring Null-Safety 는 Spring 5 에 나타 나 서 빈 안전 코드 를 더욱 편리 하 게 작성 할 수 있 습 니 다.이것 은 null-safety 라 고 합 니 다.null-safety 는 안전 하지 않 은 코드 에서 벗 어 나 게 하 는 것 이 아니 라 컴 파일 할 때 경고 가 발생 합 니 다.이러한 경 고 는 실행 중 재난 성 빈 포인터 이상(NPE)을 방지 할 수 있다.
@NonNull
@NonNull 주석 은 null-safety 의 모든 주석 에서 가장 중요 한 것 입 니 다.이 주석 을 사용 하여 원 하 는 대상 이 인용 한 모든 곳 에서 빈 제약 이 아 닌 필드,방법 파라미터 또는 방법 으로 값 을 되 돌려 줄 수 있 습 니 다.
예 를 들 어 보 겠 습 니 다.
public class Student {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
if(null != null && name.isEmpty()){
name = null;
}
this.name = name;
}
}
이 코드 는 name 에 대한 검증 에 유효 하지만 결함 이 있 습 니 다.name 이 null 로 설정 되면 name 을 사용 할 때 NullPointer Exception 으로 끝 납 니 다.@NonNull 사용 하기
Spring 의 null-safety 특성 은 아이디어 나 eclipse 가 잠재 적 인 위협 을 보고 할 수 있 도록 합 니 다.예 를 들 어 우리 가 IDEA 로 속성 에@NonNull 을 더 하면 다음 과 같은 효과 가 나타 납 니 다.
이상 하 게 도 변 함 이 없 군요.잠재 적 인 안전 힌트 를 보지 못 했 군요.그것 은 당신 이 아이디어 에 설정 하지 않 았 기 때 문 입 니 다.
안전 검사 설정
만약 당신 도 힌트 가 없다 면 다음 과 같은 방식 으로 안전 검 사 를 설정 할 수 있 습 니 다.
아직 사용 하기 어 려 우 면 오른쪽 configuration annotations 에@NonNull 과@Nullable 이 있 는 jar 가방 을 추가 하 십시오.다음 과 같 습 니 다.
덧붙이다✅ 다음 과 같은 효 과 를 볼 수 있다.
현재 fullName 은@NonNull 주석 에 컴 파 일 러 를 추가 하여 null 값 을 검사 합 니 다!
테스트 해 보 세 요.@NonNull 주석 을 지 울 수 있 습 니 다.마 우 스 를 fullName 에 두 면 이 알림 이 없습니다.
@NonNullFields
@NonNull 주 해 는 null-safety 를 확보 하 는 데 도움 이 됩 니 다.그러나 이 주석 이 모든 필드 를 직접 장식 하면 코드 라 이브 러 리 전체 가 오염 된다.
Spring 은 null 에 허용 되 지 않 는 또 다른 주 해 를 제공 합 니 다.@NonNull Fields.이 설명 은 패키지 단계 에 적합 합 니 다.개발 도구 설명 패키지 의 모든 필드 를 알려 줍 니 다.기본적으로 null 로 사용 할 수 없습니다.
Parent 클래스 를 새로 만 들 고 이 클래스 에 속 하 는 패키지 아래 package-info.java 라 는 클래스 를 만 듭 니 다.자바 클래스 가 아 닌 만 든 file 입 니 다.package-info.java 라 고 합 니 다.다음 과 같 습 니 다.
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.java 의@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;
다음 주석 을 추가 한 효 과 는 다음 과 같 습 니 다.값 을 되 돌 릴 때 컴 파일 기간 의 힌트 를 받 을 수 있 습 니 다.결어
글 을 보고 나 면@NonNull,@Nullable,@NonNullFields,@NonNullApi 네 개의 주석 과 각자 의 역할 범위,컴 파일 기간 의 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에 따라 라이센스가 부여됩니다.