Lombok
アノテーションを使用すると、Lombok は Java コードを簡素化し、開発効率を向上させることができます。 Lombok はそれ自体が優れた Java コード ライブラリであり、便宜的な構文シュガーを使用して Java コーディングを簡素化し、Java コードを合理化する方法を提供します。ただし、Lombok は標準の Java ライブラリではありません。
Web 開発のプロセスでは、頻繁に Java クラスを記述する必要があり、対応するゲッター/セッター、コンストラクター、equals およびその他のメソッドを追加するのに時間がかかります。属性が多い場合、getter/setter メソッドも多数存在しますが、それらは非常に長く、技術的な内容も多くないため、属性を変更すると、対応するメソッドの変更を忘れがちです。
#公式 Web サイト: Project Lombok
1. Lombok でよく使用される注釈
注釈 | Function |
@Data | はクラスに注釈が付けられており、クラスのすべての属性の取得および設定メソッドを提供します。また、equals、canEqual、hashCode、toString メソッドも提供します。 |
@Setter | はプロパティに注釈が付けられ、プロパティの設定メソッドを提供します |
##@Setter
属性に注釈を付けます。属性の取得メソッドを提供します。 |
|
@Log4j
クラスに注釈を付けます。クラス log4j ログ オブジェクトの log という名前の属性 |
| #@NoArgsConstructor
はクラスに注釈が付けられており、クラス | ## にパラメータなしのコンストラクターを提供します。 ##@ AllArgsConstructor |
クラスにアノテーションが付けられ、クラスに完全にパラメータ化されたコンストラクター メソッドを提供します
| #@Cleanup: | ストリームを閉じる
| @Builder | アノテーション付きクラスはコンストラクター モードを追加します
| @Synchronized | 同期ロック
| @SneakyThrows | 例外をキャッチする try/catch と同様の例外をキャッチします
| @NonNull | Addパラメータへのこのアノテーション。パラメータが null の場合、null ポインタ例外がスローされます。
| @Value | アノテーションは @Data に似ています。デフォルトでは、すべてのメンバー変数はプライベートな最終変更として定義され、set メソッドは生成されません。
2. Lombok アノテーションが失敗する理由
pom.xml に Lombok 依存関係を導入した後、Lombok プラグインをインストールする必要もあります ,restart IDEA が有効になります。
統合プロセス
1. Lombok 依存関係の導入:
次のコードをコピーして pom.xml に挿入し、Maven ウェアハウスが依存関係を自動的にダウンロードしてインストールするまで待ちます。 、自動パッケージインポートがない場合は、「手動でインポート」をクリックします。
<!--导入lombok小辣椒驱动依赖,用来生成get/set等方法依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<!--<optional>true</optional>-->
<version>1.18.12</version>
<scope>provided</scope><!--自动生成有参无参构造-->
</dependency>
ログイン後にコピー
2. Lombok プラグインをインストールします
[ファイル]->>[設定]->>[プラグイン]->>[検索]をクリックします。 IDEA 内 Lombok がプラグインをインストールした後、IDEA を再起動します;
3. Lombok を使用して、プロパティのゲッター/セッターおよびその他のメソッド プログラム コード例を生成します
a. Lombok Entity クラスを使用して書かれていない (プログラムは太くて醜い)
IDE に付属のショートカット キーを使用して、ゲッター/セッター メソッドを自動的に生成します:
# #
package com.dvms.entity;
/*
*文件名: Anglerecord
*创建者: CJW
*创建时间:2020/6/6 14:40
*描述: 记录
*/
public class Record {
private String time;
private String device;
private String state;
public Record(String time, String device, String state) {
this.time = time;
this.device = device;
this.state = state;
}
public Record() {
}
public String getTime() {
return this.time;
}
public String getDevice() {
return this.device;
}
public String getState() {
return this.state;
}
public Record setTime(String time) {
this.time = time;
return this;
}
public Record setDevice(String device) {
this.device = device;
return this;
}
public Record setState(String state) {
this.state = state;
return this;
}
public boolean equals(final Object o) {
if (o == this) return true;
if (!(o instanceof Record)) return false;
final Record other = (Record) o;
if (!other.canEqual((Object) this)) return false;
final Object this$time = this.getTime();
final Object other$time = other.getTime();
if (this$time == null ? other$time != null : !this$time.equals(other$time)) return false;
final Object this$device = this.getDevice();
final Object other$device = other.getDevice();
if (this$device == null ? other$device != null : !this$device.equals(other$device)) return false;
final Object this$state = this.getState();
final Object other$state = other.getState();
if (this$state == null ? other$state != null : !this$state.equals(other$state)) return false;
return true;
}
protected boolean canEqual(final Object other) {
return other instanceof Record;
}
public int hashCode() {
final int PRIME = 59;
int result = 1;
final Object $time = this.getTime();
result = result * PRIME + ($time == null ? 43 : $time.hashCode());
final Object $device = this.getDevice();
result = result * PRIME + ($device == null ? 43 : $device.hashCode());
final Object $state = this.getState();
result = result * PRIME + ($state == null ? 43 : $state.hashCode());
return result;
}
public String toString() {
return "Record(time=" + this.getTime() + ", device=" + this.getDevice() + ", state=" + this.getState() + ")";
}
}
ログイン後にコピー
b. はじめに Lombok 生成方法 (プログラムはスリムで非常に快適に見えます)必要に応じて手動でアノテーションを追加するか、右クリック->>リファクタリング->>Lomok-を実行できます。 》
package com.dvms.entity;
/*
*文件名: Anglerecord
*创建者: CJW
*创建时间:2020/6/6 14:40
*描述: 记录
*/
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true) //链式调用
public class Record {
private String time;
private String device;
private String state;
}
ログイン後にコピー
利点と欠点 (考えられる問題は解決策です)利点: Lombok は getter/setter、equals、toString などを自動的に生成できます。アノテーションを使用してコンパイル時にプロパティのメソッドを作成できるため、これらのコードを手動で再構築する手間がなくなり、プログラム エンティティ クラス (entity/pojo) コードがより「スリム」でスタイリッシュに見えます。
欠点 (考えられる問題): 個人開発の場合、次の問題が発生する可能性があります:
1.Lombok は現在 JDK1.8 をサポートしていますが、JDK をアップグレードすると無効になる可能性があります。解決方法: a. IDE に付属の Alt Insert ショートカット キーを使用して、getter/setter、equals、hashCode、toString、およびコンストラクター メソッドを生成します。
最新バージョンでは、DeLombok を使用してこのツールを使用してこれらのメソッドを生成できます。右クリックして「リファクタリング」>「DeLombok:」を選択するか、コマンドを使用します:java -jar lombok.jar delombok src -d src-delomboked
ログイン後にコピー
Lombok アノテーションによって実装されたクラス ファイルを Java ソースに変換します。ロンボク文書を使用しないもの。 Lombok を使用すると JavaBean のカプセル化を簡素化できますが、可読性に影響します。さらに、このアノテーション @AllArgsConstructor は使用しないようにしてください。このアノテーションは、オブジェクトの初期化時にクラス内のすべてのプロパティを変更する機会を外部に与える巨大なコンストラクターを提供します。これは非常に安全ではありません。 Java クラス内のオブジェクトは Revise しないでください。同時に、Java クラスに複数のプロパティがある場合、Lombok は複数のパラメーター コンストラクターを Java クラスに挿入し、コンストラクター パラメーターの順序は Lombok によって完全に制御されます。 3. Lombok を使用して Javabean コードを作成した後、この Javabean に依存する他のコードは Lombok 依存関係を導入する必要があり、コード結合度が増加します。同時に、Lombok プラグインを IDE にインストールする必要もあります。 4. 共同開発の場合は、次の問題に注意する必要があります: Lombok プラグインをプログラム コードに導入する場合、他の人も Lombok プラグインをダウンロードして導入する必要があります。 -in にしないと、Java コードが正しく実行されない可能性があります。
以上がSpringBoot による Lombok の統合と一般的な問題の解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。