Spring 에서 Null 에 대해 서 잘 모 르 시 는 걸 로 하 겠 습 니 다.

6212 단어 SpringNull
이전에 일부 코드 에서@Nullable 로 표 시 된 주석 을 본 적 이 있 습 니 다.그 당시 에 도 무슨 뜻 인지 신경 쓰 지 않 았 습 니 다.그 후에 참 지 못 하고 조 사 를 했 습 니 다.이 글 은 Spring 에서 Null 에 관 한 일 들 을 이야기 합 니 다.
자바 에 서 는 null 의 안전성 을 나타 내 는 형식 을 사용 할 수 없습니다.그러나 Spring Framework 는 현재 org.springframework.lang 패키지 에서 다음 과 같은 설명 을 제공 하여 API 와 필드 의 가용성 을 설명 합 니 다.
  • @Nullable:매개 변수,반환 값 또는 필드 를 null 의 주석 으로 지정 할 수 있 습 니 다
  •  @NonNull:상기 주석 과 달리 지정 한 매개 변수,반환 값 또는 필드 가 null 로 허용 되 지 않 음 을 표시 합 니 다.(@NonNullApi 와@NonNullFields 에 적용 되 는 인자/반환 값 과 필드 가 필요 없습니다
  • @NonNullApi:패키지 단계 의 설명 은 null 을 매개 변수 와 반환 값 으로 하지 않 습 니 다
  • @NonNullFields:패키지 단계 의 설명 필드 는 기본적으로 비어 있 지 않 습 니 다
  • Spring Framework 자 체 는 위의 설명 을 이용 하 였 으 나,Spring 기반 자바 프로젝트 에 도 사용 하여 빈 보안 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 검 사 를 어떻게 설정 하 는 지 알 아야 합 니 다.
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기