Lombok 프레임워크 통합 및 원리 해석

Lombok 소개


1, 용목도 2, 인도네시아 시누사덴가라(Nusa Tenggara Barat)성 섬 3, 서용목해협은 발리를 마주하고 동쪽은 알래스카(Alas)해협면 송바와(Sumbawa)섬을 사이에 두고 북쪽은 자바섬, 남쪽은 인도양에 임한다.
홈페이지의 소개: 간단한 주석을 통해 코드를 간소화하여 지루한 코드를 없애는 목적을 달성한다.

Lombok의 장점


1. 인코딩 효율 향상 2. 코드를 간결하게 만들기 3. 장황한 코드 제거 4. 필드의 이름을 수정할 때 방법 이름을 잊어버리지 않도록 하기 5.'칸막이'주석을 올리기: IDE에서 Lombok을 지원해야 한다. 그렇지 않으면 IDE가 오류를 보고할 수 있다.

Lombok의 실현 원리


1. 그 개발은 JSR 269 Pluggable Annotation Processing API2를 따르고 javac는java6에서부터'JSR 269 API'규범 3을 지원한다. 즉, 프로그램이 이 API를 실현하면 javac가 실행될 때 호출될 수 있다. 4, Lombok는'JSR 269 API'를 실현하고 컴파일할 때 javac 컴파일링의 구체적인 절차는 다음과 같다.

프로젝트 도입


마븐의pom 프로필에 가져오기


    org.projectlombok
    lombok
    1.18.2
    provided
 :   IDEA    Lombok  、Eclipse      jar

Lombok 사용


@Data: 해당 Getter,Setter@Getter@Getter(AccessLevel.PROTECTED) - 생성된 Get의 권한은protected@Setter@Setter(AccessLevel.PROTECTED)
@NoArgsConstructor - 무참구조자 @AllArgsConstructor - 모든 매개 변수 구조자@ToString@ToString(exclude = "column") - 제외
@EqualsAndHashCode@EqualsAndHashCode(exclude = "column") @Slf4j(logback 로그 프레임워크 사용) @log4j(log4j 로그 프레임워크 사용)
@Tostring(exclude = {"column1", "column2"}) 블랙리스트 @Tostring(of = {"column1", "column2"}) 화이트리스트 Equals AndHashCode 동상
@Data 포함(@Getter, @Setter, @ToString, @EqualsAndHashCode)
이상은 대략적인 사용 방식입니다. 역번역을 통해 Lombok의 실현을 알아보겠습니다.

역컴파일 이해 Lombok


Java Decompiler 여러분은 이 사이트에서 JD-GUI, 간편한 역컴파일 도구를 다운로드할 수 있습니다.Java Decompiler를 통해 Clas 파일을 검증했습니다.
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(exclude = "name")
@ToString(of = "password")
public class Person implements Serializable{

    private static final long serialVersionUID = 5965420331615591278L;

    private Integer id;

    private String name;

    private String password;
}
@Slf4j
public class PersonServiceImpl {

    public Person findOne(){
        log.info("findOne success");
        return new Person();
    }

}

나는 포조 대상에 Lombok의 주석을 주입하고 이러한 원본 코드를 유지했다. 그리고 아날로그 서비스 층은log 주석을 사용했다. 다음에 프로젝트를 컴파일해서 생성된class 파일이 어떤지 보자.
여기에서 우리는 컴파일된class 파일과 원본 코드가 다르다는 것을 볼 수 있으며, Lombok이 우리를 도와 변경을 진행했다.
package com.example.lombok.pojo;

import java.io.Serializable;

public class Person
  implements Serializable
{
  private static final long serialVersionUID = 5965420331615591278L;
  private Integer id;
  private String name;
  private String password;
  
  public void setId(Integer id)
  {
    this.id = id;
  }
  
  public void setName(String name)
  {
    this.name = name;
  }
  
  public void setPassword(String password)
  {
    this.password = password;
  }
  
  public Person(Integer id, String name, String password)
  {
    this.id = id;this.name = name;this.password = password;
  }
  
  public boolean equals(Object o)
  {
    if (o == this) {
      return true;
    }
    if (!(o instanceof Person)) {
      return false;
    }
    Person other = (Person)o;
    if (!other.canEqual(this)) {
      return false;
    }
    Object this$id = getId();Object other$id = other.getId();
    if (this$id == null ? other$id != null : !this$id.equals(other$id)) {
      return false;
    }
    Object this$password = getPassword();Object other$password = other.getPassword();return this$password == null ? other$password == null : this$password.equals(other$password);
  }
  
  protected boolean canEqual(Object other)
  {
    return other instanceof Person;
  }
  
  public int hashCode()
  {
    int PRIME = 59;int result = 1;Object $id = getId();result = result * 59 + ($id == null ? 43 : $id.hashCode());Object $password = getPassword();result = result * 59 + ($password == null ? 43 : $password.hashCode());return result;
  }
  
  public String toString()
  {
    return "Person(password=" + getPassword() + ")";
  }
  
  public Integer getId()
  {
    return this.id;
  }
  
  public String getName()
  {
    return this.name;
  }
  
  public String getPassword()
  {
    return this.password;
  }
  
  public Person() {}
}
package com.example.lombok.service;

import com.example.lombok.pojo.Person;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class PersonServiceImpl
{
  private static final Logger log = LoggerFactory.getLogger(PersonServiceImpl.class);
  
  public Person findOne()
  {
    log.info("findOne success");
    return new Person();
  }
}

만약 당신에게 도움이 된다면, 본인의 기술 공호를 주목하거나, 좋아요를 눌러 주십시오. 감사합니다.

좋은 웹페이지 즐겨찾기