자바 개발 신기 Lombok 사용 설명

11188 단어 JavaLombok쓰다
최근 에는 SpringBoot 시리즈 글 과 비디오 튜 토리 얼 을 쓰 고 있 으 며,매번 Getter/setter,구조 기 방법,문자열 출력 을 위 한 ToString 방법 과 Equals/HashCode 방법 등 을 반복 적 으로 쓰 고 있다.시간 낭비 도 코드 의 가 독성 에 영향 을 미친다.그래서 오늘 은 코드 를 쉽게 읽 을 수 있 도록 자바 개발 신기 인 롬 복 을 추천 합 니 다.
Lombok 이 뭐야?
Lombok 은 자바 개발 플러그 인 으로 정 의 된 주 해 를 통 해 지루 하고 번 거 로 운 코드 를 간소화 할 수 있 으 며 주로 간단 한 자바 모델 대상(POJO)을 대상 으로 합 니 다.
장점 은 분명 하 다.대량의 중복 작업 을 절약 할 수 있다.특히 POJO 류 의 속성 이 증감 할 때 중복 수정 이 필요 한 Getter/setter,구조 기 방법,equals 방법 과 toString 방법 등 이다.
또한 Lombok 은 이러한 내용 에 대한 처 리 는 컴 파일 기간 이지 반사 체 제 를 통 해 이 루어 지 는 것 이 아니 라 시스템 의 성능 을 떨 어 뜨리 지 않 는 다 는 장점 이 있다.
다음은 구체 적 인 사용 을 살 펴 보 자.
Lombok 의 설치
Lombok 의 설 치 는 두 부분 으로 나 뉜 다.Idea 플러그 인의 설치 와 maven 의 pom 파일 가 져 오기.
첫 번 째 단 계 는 Idea 플러그 인 설정 에서 Lombok 이나 홈 페이지 를 검색 하여 로 컬 설 치 를 다운로드 합 니 다.

또한 플러그 인의 설명 에서 도 지원 하 는 주 해 를 볼 수 있 습 니 다.
두 번 째 단 계 는 pom 에서 의존 하 는 것 을 도입 합 니 다.현재 가장 가 는 버 전 은 1.18.10 입 니 다.

<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <version>1.18.10</version>
</dependency>
Idea 를 통 해 Spring Boot 프로젝트 를 만 드 는 경우 프로젝트 를 만 들 때'Developer Tool'에서 Lombok 을 직접 선택 할 수 있 습 니 다.
상기 두 단 계 를 완성 하면 코드 에서 이 신 구 를 사용 할 수 있 습 니 다.
Lombok 의 사용
@Data
@Data 에서 가장 자주 사용 하 는 주석 중 하나 입 니 다.주 해 는 클래스 에 있어 서 이러한 모든 속성 을 제공 하 는 getter/setter 방법 을 제공 하고 equals,canEqual,hashCode,toString 방법 도 제공 합 니 다.
이곳 의 제공 은 무슨 뜻 입 니까?개발 자 들 이 손 으로 쓰 지 않 고 Lombok 이 만들어 주 는 것 이다.
@Data 예 시 를 사용 하면 다음 과 같 습 니 다.가장 직관 적 인 것 은 getter/setter 방법 을 쓰 지 않 아 도 됩 니 다.

@Data
public class Demo {
 private int id;
 private String remark;
}
우 리 는 이 종류의 컴 파일 후 어떤 모습 인지 보 았 다.

public class Demo {
  private int id;
  private String remark;

  public Demo() {
  }

  public int getId() {
    return this.id;
  }

  public String getRemark() {
    return this.remark;
  }

  public void setId(final int id) {
    this.id = id;
  }

  public void setRemark(final String remark) {
    this.remark = remark;
  }

  public boolean equals(final Object o) {
    if (o == this) {
      return true;
    } else if (!(o instanceof Demo)) {
      return false;
    } else {
      Demo other = (Demo)o;
      if (!other.canEqual(this)) {
        return false;
      } else if (this.getId() != other.getId()) {
        return false;
      } else {
        Object this$remark = this.getRemark();
        Object other$remark = other.getRemark();
        if (this$remark == null) {
          if (other$remark != null) {
            return false;
          }
        } else if (!this$remark.equals(other$remark)) {
          return false;
        }

        return true;
      }
    }
  }

  protected boolean canEqual(final Object other) {
    return other instanceof Demo;
  }

  public int hashCode() {
    int PRIME = true;
    int result = 1;
    int result = result * 59  this.getId();
    Object $remark = this.getRemark();
    result = result * 59  ($remark == null ? 43 : $remark.hashCode());
    return result;
  }

  public String toString() {
    return "Demo(id="  this.getId()  ", remark="  this.getRemark()  ")";
  }
}

 위의 역 컴 파일 코드 는 기본 적 인 구조 방법,속성 을 제공 하 는 getter/setter 방법,equals,canEqual,hashCode,toString 방법 을 볼 수 있 습 니 다.
사용 하기에 편리 하지 않 습 니까?가장 관건 적 인 것 은 속성 을 추가 하거나 감소 할 때 속성 정 의 를 직접 삭제 하면 됩 니 다.효율 이 많이 향상 되 었 습 니까?
편폭 을 절약 하기 위해 서 뒤의 관련 주 해 는 역 컴 파일 효 과 를 보지 않 습 니 다.여러분 은 아이디어 로 컴 파일 된 후에 대응 하 는 class 파일 을 직접 열 면 볼 수 있 습 니 다.
@Setter
속성 에 작용 하여 이 속성 에 setter 방법 을 제공 합 니 다.역할 과 클래스 에 서 는 이러한 모든 속성 에 setter 방법 을 제공 하고 기본 구조 방법 을 제공 합 니 다.

public class Demo {
 private int id;
 @Setter
 private String remark;
}
 
@Setter
public class Demo {
 private int id;
 private String remark;
}
@Getter
기본적으로 같은@Setter 방법 을 사용 하지만 getter 방법 을 제공 합 니 다.더 이상 군말 하지 않 습 니 다.
@Log4j
클래스 에 사용 되 며,이 클래스 에 로그 라 는 로그 4j 로그 대상 을 제공 합 니 다.

@Log4j
public class Demo {
}
이 속성 은 일반적으로 Controller,Service 등 업무 처리 류 에 사용 된다.이 주석 과 같은 것 은@Log4j 2,말 그대로 Log4j 2 입 니 다.
@AllArgsConstructor
클래스 에 작용 하여 이 클래스 에 모든 참 을 포함 하 는 구조 방법 을 제공 합 니 다.이때 기본 구조 방법 은 제공 되 지 않 습 니 다.

@AllArgsConstructor
public class Demo {
 private int id;
 private String remark;
}
효 과 는 다음 과 같 습 니 다:

public class Demo {
  private int id;
  private String remark;

  public Demo(final int id, final String remark) {
    this.id = id;
    this.remark = remark;
  }
}

@NoArgsConstructor
유형 에 작용 하여 인삼 이 없 는 구조 방법 을 제공 하 다.@AllArgs Constructor 와 동시에 사용 할 수 있 습 니 다.이때 두 가지 구조 방법 이 생 성 됩 니 다.무 참 구조 방법 과 전 참 구조 방법 입 니 다.
@EqualsAndHashCode
클래스 에 작용 하여 equals,canEqual,hashCode 방법 을 생 성 합 니 다.구체 적 인 효 과 는 처음@Data 효 과 를 참조 합 니 다.
@NonNull
속성 에 작용 하여 이 매개 변수 에 대한 비 공 검 사 를 제공 합 니 다.매개 변수 가 비어 있 으 면 빈 포인터 이상 을 던 집 니 다.
사용 방법:

public class Demo {
 @NonNull
 private int id;
 private String remark;
}
효 과 는 다음 과 같 습 니 다:

public class Demo {
  @NonNull
  private int id;
  private String remark;
}
@RequiredArgsConstructor
클래스 에 작용 하 며,클래스 에@NonNull 주석 이 있 거나 final 수식 이 있 는 모든 구성원 변 수 를 매개 변수 로 구조 방법 을 생 성 합 니 다.
@Cleanup
변수 에 작용 하여 이 변수 가 대표 하 는 자원 이 자동 으로 닫 히 는 것 을 보증 합 니 다.기본적으로 자원 을 호출 하 는 close()방법 입 니 다.이 자원 에 다른 닫 는 방법 이 있 으 면 사용 할 수 있 습 니 다.

@Cleanup(“methodName”)   。
public void jedisExample(String[] args) {
  try {
    @Cleanup Jedis jedis =  redisService.getJedis();
  } catch (Exception ex) {
    logger.error(“Jedis  :”,ex)
  }
}
효 과 는:

public void jedisExample(String[] args) {

  Jedis jedis= null;
  try {
    jedis = redisService.getJedis();
  } catch (Exception e) {
    logger.error(“Jedis  :”,ex)
  } finally {
    if (jedis != null) {
      try {
        jedis.close();
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }
}

@ToString
클래스 에 작용 하여 모든 인 자 를 포함 하 는 toString 방법 을 생 성 합 니 다.@Data 에서 toString 방법 을 보십시오.
@Value
클래스 에 작용 하면 모든 매개 변수의 구조 방법,getter 방법,equals,hashCode,toString 방법 을 생 성 합 니 다.@Data 에 비해 전 참 구조 방법 이 많 고 기본 구조 방법,setter 방법,canEqual 방법 이 적 습 니 다.
이 주 해 는 필드 에 final 수식 을 추가 합 니 다.개인 적 으로 제어 가 안 되 는 것 같 아서 사용 하 는 것 을 권장 하지 않 습 니 다.
@SneakyThrows
방법 에 있어 서 방법 내 코드 를 try-catch 처리 하 는 것 과 같 습 니 다.이상 catch 를 캡 처 할 때 Lombok.sneakyThrow(e)로 이상 을 던 지 는 것 과 같 습 니 다.@SneakyThrows(BizException.class)를 사용 하여 구체 적 인 이상 을 던 집 니 다.

@SneakyThrows
public int getValue(){
 int a = 1;
 int b = 0;
 return a/b;
}
효 과 는 다음 과 같 습 니 다:

public int getValue() {
  try {
    int a = 1;
    int b = 0;
    return a / b;
  } catch (Throwable var3) {
    throw var3;
  }
}
@Synchronized
클래스 방법 이나 인 스 턴 스 방법 에 사용 되 며,효 과 는 synchronized 와 같 습 니 다.차이 점 은 잠 금 대상 이 다 릅 니 다.클래스 방법 과 인 스 턴 스 방법 에 대해 synchronized 키워드 의 잠 금 대상 은 각각 클래스 의 class 대상 과 this 대상 이 고@Synchronized 의 잠 금 대상 은 각각 개인 정적 final 대상 lock 과 개인 final 대상 lock 입 니 다.자물쇠 대상 도 지정 할 수 있 습 니 다.

public class FooExample { 

 private final Object readLock = new Object(); 

 @Synchronized 
 public static void hello() { 
   System.out.println("world");  
 } 

 @Synchronized("readLock") 
 public void foo() { 
  System.out.println("bar"); 
 } 

}

효 과 는 다음 과 같다.

public class FooExample { 

 private static final Object $LOCK = new Object[0]; 
 private final Object readLock = new Object(); 

 public static void hello() { 
  synchronized($LOCK) { 
   System.out.println("world"); 
  } 
 }  

 public void foo() { 
  synchronized(readLock) { 
    System.out.println("bar");  
  } 
 } 

}

val
실제 기록 형식 이 아 닌 부분 변수 성명 형식 으로 val 을 사용 합 니 다.이 동작 을 실행 할 때 초기 화 표현 식 에서 형식 을 추정 합 니 다.

public Map<String, String> getMap() {
 val map = new HashMap<String, String>();
 map.put("1", "a");
 return map;
}
효 과 는 다음 과 같 습 니 다:

public Map<String, String> getMap() {
  HashMap<String, String> map = new HashMap();
  map.put("1", "a");
  return map;
}
즉,부분 변수 에서 Lombok 은 구체 적 인 유형 을 추정 해 주지 만 부분 변수 에 만 사용 할 수 있다.
@Builder
클래스 에 작용 합 니 다.만약 당신 이 Builder 의 흐름 식 조작 을 좋아한다 면@Builder 는 당신 이 좋아 하 는 주해 일 것 입 니 다.
사용 방법:

@Builder
public class Demo {
 private int id;
 private String remark;
}
효 과 는 다음 과 같 습 니 다:

public class Demo {
  private int id;
  private String remark;

  Demo(final int id, final String remark) {
    this.id = id;
    this.remark = remark;
  }

  public static Demo.DemoBuilder builder() {
    return new Demo.DemoBuilder();
  }

  public static class DemoBuilder {
    private int id;
    private String remark;

    DemoBuilder() {
    }

    public Demo.DemoBuilder id(final int id) {
      this.id = id;
      return this;
    }

    public Demo.DemoBuilder remark(final String remark) {
      this.remark = remark;
      return this;
    }

    public Demo build() {
      return new Demo(this.id, this.remark);
    }

    public String toString() {
      return "Demo.DemoBuilder(id="  this.id  ", remark="  this.remark  ")";
    }
  }
}

우 리 는 이러한 내부 에서 Demo Builder 류 를 제공 하여 구체 적 인 흐름 식 작업 을 처리 하 는 것 을 볼 수 있다.전 삼 의 구조 방법 도 제공 했다.
작은 매듭
마지막 으로 개인 적 인 견 해 를 말씀 드 리 겠 습 니 다.이 신 구 는 사용 하기 좋 지만 무조건 사용 하 는 것 을 권장 하지 않 습 니 다.프로그램의 효율 등 문 제 를 위해 직접 써 야 할 코드 는 직접 써 야 합 니 다.결국 맞 춤 형 만 이 현재 장면 에 가장 최적화 되 고 가장 부합된다.
자바 개발 신기 Lombok 사용 에 대한 자세 한 설명 은 여기까지 입 니 다.자바 Lombok 사용 에 관 한 더 많은 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기