자바 효율 도구 Lombok 의 구체 적 인 사용
과거 자바 프로젝트 에는 너무 많은 불 친절 한 코드 가 가득 합 니 다:POJO 의 getter/setter/toString;이상 처리;I/O 흐름 의 닫 기 동작 등 이런 모델 코드 는 기술적 함량 도 없고 코드 의 미관 에 도 영향 을 주 며 Lombok 이 생 겨 났 다.
먼저 설명 하 자 면 모든 기술 의 등장 은 특정한 문 제 를 해결 하기 위 한 것 이다.만약 에 이 를 바탕 으로 기이 한 기 교 를 세우 면 자바 자체 로 돌아 가 는 것 이 낫다.남용 하지 말고 합 리 적 으로 사용 해 야 한다.
Lombok 의 사용 은 매우 간단 합 니 다.다음은 우리 함께 보 겠 습 니 다.
1)해당 Maven 가방 도입:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
<scope>provided</scope>
</dependency>
Lombok 의 scope=provided 는 컴 파일 단계 에서 만 유효 하 며 가방 에 넣 을 필요 가 없다 는 것 을 설명 합 니 다.사실은 그렇습니다.롬 복 은 컴 파일 기간 에 롬 복 주 해 를 가 진 자바 파일 을 완전한 Class 파일 로 정확하게 컴 파일 합 니 다.2)Lombok 에 대한 IDE 도구 지원 추가:
IDEA 에 Lombok 지원 을 도입 하면 다음 과 같 습 니 다.
File--Settings 설정 인터페이스 를 클릭 하고 Lombok 플러그 인 을 설치 합 니 다.
File--Settings 설정 창 을 클릭 하여 Annocation Processors 를 엽 니 다.
이 항목 을 여 는 것 은 Lombok 주석 이 컴 파일 단계 에서 작용 하도록 하기 위해 서 입 니 다.
Eclipse 의 Lombok 플러그 인 설 치 는 자체 바 이 두 를 사용 할 수 있 고 간단 합 니 다.특히 Eclipse 에 내 장 된 컴 파일 러 는 Oracle javac 가 아니 라 eclipse 가 자체 적 으로 실현 한 Eclipse Compiler for Java(ECJ)이기 때 문 입 니 다.ECJ 가 Lombok 을 지원 하려 면 eclipse.ini 설정 파일 에 다음 과 같은 두 가지 내용 을 추가 해 야 합 니 다.
-Xbootclasspath/a:[lombok.jar 소재 경로]
-javaagent:[lombok.jar 소재 경로]
3)롬 복 실현 원리:
자바 6 부터 자바 c 는 프로그램 이 이 API 를 실현 하면 자바 c 가 실 행 될 때 호출 될 수 있 는'JSR 269 Pluggable Annotation Processing API'규범 을 지원 하고 있다.
롬 복 은'JSR 269 API'를 구현 한 프로그램 이다.javac 를 사용 하 는 과정 에서 역할 을 하 는 구체 적 인 절 차 는 다음 과 같 습 니 다.
POJO 클래스 에서 자주 사용 하 는 주석:
@Getter/@Setter:역할 클래스 에서 모든 구성원 변 수 를 생 성 하 는 getter/setter 방법;구성원 변수 에 작용 하여 이 구성원 변 수 를 생 성 하 는 getter/setter 방법.접근 권한 및 게 으 른 로드 여부 등 을 설정 할 수 있 습 니 다.
package com.trace;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
/**
* Created by Trace on 2018/5/19.<br/>
* DESC:
*/
@SuppressWarnings("unused")
public class TestClass {
public static void main(String[] args) {
}
@Getter(value = AccessLevel.PUBLIC)
@Setter(value = AccessLevel.PUBLIC)
public static class Person {
private String name;
private int age;
private boolean friendly;
}
public static class Animal {
private String name;
private int age;
@Getter @Setter private boolean funny;
}
}
Structure 보기에 서 getter/setter 가 생 성 된 방법 을 볼 수 있 습 니 다.컴 파일 된 코드 는 다음 과 같 습 니 다.[이것 도 전통 자바 프로 그래 밍 에 필요 한 모델 코드 입 니 다]
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.trace;
public class TestClass {
public TestClass() {
}
public static void main(String[] args) {
}
public static class Animal {
private String name;
private int age;
private boolean funny;
public Animal() {
}
public boolean isFunny() {
return this.funny;
}
public void setFunny(boolean funny) {
this.funny = funny;
}
}
public static class Person {
private String name;
private int age;
private boolean friendly;
public Person() {
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
public boolean isFriendly() {
return this.friendly;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setFriendly(boolean friendly) {
this.friendly = friendly;
}
}
}
@ToString:클래스 에 작용 합 니 다.기본 toString()방법 을 덮어 씁 니 다.of 속성 을 통 해 일부 필드 를 한정 적 으로 표시 할 수 있 습 니 다.exclude 속성 을 통 해 일부 필드 를 제거 할 수 있 습 니 다.@EqualsAndHashCode:클래스 에 작용 하여 기본 equals 와 hashCode 를 덮어 씁 니 다.
@NonNull:구성원 변수 와 매개 변수 에 주로 작용 합 니 다.표 지 는 비어 있 으 면 안 됩 니 다.그렇지 않 으 면 빈 포인터 이상 을 던 집 니 다.
@NoArgsConstructor,@RequiredArgsConstructor,@AllArgsConstructor:클래스 에 작용 하여 구조 함 수 를 생 성 하 는 데 사 용 됩 니 다.staticName,access 등의 속성 이 있 습 니 다.
staticName 속성 이 설정 되면 정적 인 방법 으로 인 스 턴 스 를 생 성 합 니 다.access 속성 은 접근 권한 을 제한 할 수 있 습 니 다.
@NoArgsConstructor:무 참 구조 기 생 성;
@RequiredArgs Constructor:final 과@NonNull 주 해 를 포함 하 는 구성원 변 수 를 생 성 하 는 구조 기;
@AllArgs Constructor:전 삼 구조 기 생 성.
컴 파일 후 결과:
public static class Person {
@NonNull
private String name;
private int age;
private boolean friendly;
public String toString() {
return "TestClass.Person(name=" + this.getName() + ", age=" + this.getAge() + ")";
}
@NonNull
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
public boolean isFriendly() {
return this.friendly;
}
public void setName(@NonNull String name) {
if(name == null) {
throw new NullPointerException("name");
} else {
this.name = name;
}
}
public void setAge(int age) {
this.age = age;
}
public void setFriendly(boolean friendly) {
this.friendly = friendly;
}
private Person() {
}
private static TestClass.Person of() {
return new TestClass.Person();
}
@ConstructorProperties({"name"})
Person(@NonNull String name) {
if(name == null) {
throw new NullPointerException("name");
} else {
this.name = name;
}
}
@ConstructorProperties({"name", "age", "friendly"})
public Person(@NonNull String name, int age, boolean friendly) {
if(name == null) {
throw new NullPointerException("name");
} else {
this.name = name;
this.age = age;
this.friendly = friendly;
}
}
}
@Data:클래스 에 작용 하여 다음 주해 의 집합 입 니 다:@ToString@EqualsAndHashCode@Getter@Setter@RequiredArgs Constructor@Builder:클래스 에 작용 하여 클래스 를 건설 자 모드 로 전환 합 니 다.
@Log:클래스 에 작용 하여 로그 변 수 를 생 성 합 니 다.서로 다른 로그 구현 제품 에 대한 설명 이 다 릅 니 다.
기타 중요 한 주석:
@Cleanup:자원 을 자동 으로 닫 습 니 다.자바.io.Closeable 인 터 페 이 스 를 실현 한 대상 에 게 유효 합 니 다.예 를 들 어 전형 적 인 IO 흐름 대상 입 니 다.
컴 파일 후 결 과 는 다음 과 같다.
너무 깔끔 한 거 아니 야?
@Sneaky Throws:검 사 를 받 은 이상 을 포착 하여 던 질 수 있 습 니 다.상기 main 방법 은 다음 과 같 습 니 다.
@Synchronized:방법 단계 에 작용 하여 synchronize 키워드 나 lock 자 물 쇠 를 교체 할 수 있 습 니 다.쓸모 가 없습니다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.