ロンボク構成システム
1. 序章
このチュートリアルでは、Lombokの構成パラメーターについて説明します。 さまざまなオプションと、構成を正しく設定する方法について説明します。
2. 構成の概要
Lombok は、Javaアプリケーションのほぼすべての標準的な定型文を排除するのに役立つライブラリです。 多くのプロパティと構成をテストします。 まず、Lombok依存関係を追加します。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>provided</scope>
</dependency>
Lombokの構成システムは、プロジェクトのすべてのコンポーネントで同じであることが多い多くの貴重な設定を提供します。 ただし、Lombokの動作を変更またはカスタマイズしたり、使用可能なすべての機能から使用できるものと使用できないものを定義したりすることもできます。 たとえば、実験的な機能が使用されている場合は、警告またはエラーを表示するようにLombokに指示できます。
Lombokの動作の定義またはカスタマイズを開始するには、 lombok.config。というファイルを作成する必要があります。このファイルは、プロジェクト、ソースコード、または任意のパッケージのルートに残すことができます。 作成されると、子ディレクトリ内のすべてのソースファイルは、そのようなファイルで定義された構成を継承します。 複数の構成ファイルを持つことが可能です。 たとえば、ルートディレクトリに一般的なプロパティを使用して構成ファイルを定義し、他のプロパティを定義する特定のパッケージに別のファイルを作成できます。
新しい構成は、指定されたパッケージのすべてのクラスとすべての子パッケージに影響します。 また、同じプロパティの定義が複数ある場合は、クラスまたはメンバーに近い方が優先されます。
3. 基本構成
最初に言及することの1つは、機能のプロパティが多すぎて説明できないことです。 このため、最も一般的なもののみを表示します。 使用可能なオプションを確認するには、 Lombokのページに移動し、jarをダウンロードして、ターミナルで次のコマンドを実行します。
java -jar lombok.jar config -g --verbose
その結果、すべてのプロパティとその可能な値の完全なリストと、その目標を説明する簡単な説明が表示されます。
ここで、典型的なlombok.configファイルを見てみましょう。
config.stopBubbling = true
lombok.anyconstructor.addconstructorproperties = false
lombok.addLombokGeneratedAnnotation = true
lombok.experimental.flagUsage = WARNING
# ... more properties
ファイルで使用されているプロパティは、説明のみを目的としています。 それらについては後で説明します。 しかし、ここでは、Lombokプロパティの形式とその定義を観察できます。
config.stopBubblingプロパティから始めましょう–このオプションは、親ディレクトリで構成ファイルを検索しないように構成システムに指示します。 このプロパティをワークスペースまたはプロジェクトのルートに追加することをお勧めします。 デフォルトでは、その値はfalseです。
4. 主なプロパティ
4.1. グローバル構成キー
グローバル構成キーは、構成システム自体の多くに影響を与える可能性のある構成です。 次に、そのようなキーの例をいくつか見ていきます。
最初に説明するキーは
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
public class Account {
private double balance;
private String accountHolder;
}
そして、これが生成されたコードです:
public class Account {
private double balance;
private String accountHolder;
@ConstructorProperties({"balance", "accountHolder"})
@Generated
public Account(double balance, String accountHolder) {
this.balance = balance;
this.accountHolder = accountHolder;
}
@Generated
public Account() {}
// default generated getter and setters
}
上記のコードスニペットでは、@ConstructorPropertiesアノテーションを含む生成されたクラスを確認できます。
次に、
もう1つの役立つキーは
最後に、 lombok.addSuppressWarnings、があり、 false の場合、Lombokは注釈 @SuppressWarnings( “all”)、の追加を停止します。これは現在のデフォルトの動作です。 。 これは、生成されたコードで静的アナライザーを使用する場合に役立ちます。
4.2. その他の構成キー
最初の機能固有のキーlombok.accessors.chain、である場合、 true の場合、セッターメソッドの動作が変更されます。 void return 、の代わりに、これらのメソッドはthisを返します。 以下に示すように、呼び出しの連鎖を許可します。
@Test
void should_initialize_account() {
Account myAccount = new Account()
.setBalance(2000.00)
.setAccountHolder("John Snow");
assertEquals(2000.00, myAccount.getBalance());
assertEquals("John Snow", myAccount.getAccountHolder());
}
前のものと同様に、 lombok.accessors.fluent は、プロパティ名のみを使用してアクセサーメソッドからプレフィックスsetおよびgetを削除します。 。
lombok.log.fieldName キーは、ユーザーが構成したときに生成されたログフィールドの名前を変更します。 デフォルトでは、lombok.log.fieldNameキーはlogを使用してフィールドに名前を付けますが、この例では、domainLogに変更しました。
#Log name customization
lombok.log.fieldName = domainLog
次に、実際の動作を確認できます。
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@Log
public class Account {
// same as defined previously
public Account withdraw(double amount) {
if (this.balance - abs(amount) < 0) {
domainLog.log(Level.INFO, "Transaction denied for account holder: %s", this.accountHolder);
throw new IllegalArgumentException(String.format("Not enough balance, you have %.2f", this.balance));
}
this.balance -= abs(amount);
return this;
}
}
次は
/home/dev/repository/git/tutorials/lombok/src/main/java/com/baeldung/lombok/configexamples/TransactionLog.java:9:
warning: Use of any lombok.experimental feature is flagged according to lombok configuration.
@Accessors(prefix = {"op"})
4.3. 特別な構成キー
一部のキーは、一般的なキー値プロパティではありません。
リストに注釈を追加するには、ユーザーは次の式を使用する必要があります: lombok.copyableAnnotations + =com.test.MyAnnotation。 ライブラリは、前述のnull許容アノテーションを伝播するメカニズムを使用します。
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Log
public class Account {
@NonNull
private Double balance = 0.;
@NonNull
private String accountHolder = "";
// other methods
}
さて、Lombokによって生成されたコード:
public class Account {
@Generated
private static final Logger domainLog = Logger.getLogger(Account.class.getName());
@NonNull
private Double balance = 0.0D;
@NonNull
private String accountHolder = "";
@ConstructorProperties({"balance", "accountHolder"})
@Generated
public Account(@NonNull Double balance, @NonNull String accountHolder) {
if (balance == null) {
throw new NullPointerException("balance is marked non-null but is null");
} else if (accountHolder == null) {
throw new NullPointerException("accountHolder is marked non-null but is null");
} else {
this.balance = balance;
this.accountHolder = accountHolder;
}
}
@NonNull
@Generated
public Double getBalance() {
return this.balance;
}
@NonNull
@Generated
public String getAccountHolder() {
return this.accountHolder;
}
// Rest of the class members...
}
そして最後に、 clear lombok。(anyConfigKey)directive。構成キーをデフォルト値に復元します。 誰かが親構成ファイルで指定されたキーの値を変更した場合、それは無視されるようになりました。 ディレクティブclear、の後に、任意のLombok構成キーを使用できます。
clear lombok.addNullAnnotations
4.4. ファイルディレクティブ
これで、Lombokの構成システムがどのように機能するかとその機能のいくつかについての良いアイデアが得られました。 もちろん、これは利用可能なすべての機能の広範なリストではありませんでしたが、ここから、それを使用する方法を明確に理解する必要があります。 最後になりましたが、現在の構成ファイル内の別のファイルで定義されている構成をインポートする方法を見てみましょう。
別のファイル内に構成ファイルをインポートするには、ディレクティブをファイルの先頭に配置する必要があり、パスは相対パスまたは絶対パスのいずれかになります:
## relative or absolute path
import lombok_feature.config
config.stopBubbling = true
lombok.anyconstructor.addconstructorproperties=false
lombok.addLombokGeneratedAnnotation = true
lombok.addSuppressWarnings = false
説明のために、インポートされたファイルは次のとおりです。
# lombok_feature.config file
lombok.experimental.flagUsage = warning
5. 結論
この記事では、Lombokの構成システム、そのさまざまなプロパティ、およびそれらがその機能にどのように影響するかについて説明しました。 前述のように、利用できるオプションは他にもたくさんありますが、ここでは最も一般的なオプションのみを取り上げました。 ロンボクページで詳細を確認してください。
いつものように、この記事で使用されているすべてのコードサンプルは、GitHubでから入手できます。