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();
}
}
만약 당신에게 도움이 된다면, 본인의 기술 공호를 주목하거나, 좋아요를 눌러 주십시오. 감사합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django 질문 요약(지속적인 업데이트)요즘은 Django와 vue를 쓸 예정입니다.js에서 프로젝트를 쓰기 때문에 Django의 사용을 배워서 주로 중국어 문서를 따라갑니다.https://docs.djangoproject.com/zh-hans/2.0/같...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.