Lombok配置系统
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.基本配置
首先要提到的一件事是要讨论的特性太多了。因此,我们将只看到最常见的。要查看可用选项,请转到 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.全局配置密钥
全局配置键是可能影响许多配置系统本身的配置。接下来,我们将看到这些键的一些示例。
我们要讨论的第一个关键是Lombok.AnyBuilder.AddBuilderProperties。它添加了 @java.beans.ConstructorProperties注释到所有带参数的构造函数上。通常,在构造函数上使用反射的框架需要这个注释来映射属性,并知道构造函数中参数的正确顺序。以下是Lombok版本中的代码:
@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 注释。
接下来,我们有 这个Lombok.addLombokGeneratedAnnotation。如果 true, Lombok 将为所有生成的方法携带 这个 @lombok.Generated注解。当从包扫描或代码覆盖工具中删除Lombok生成的方法时,这很有用.
另一个有用的关键是wallet.addNullAnnotation。此属性支持许多内置选项,如javax(JSR305)、eclipse、JetBrains、NetBeans、Android等。也可以使用我们自己定义的注释,例如 CUSTOM:com.example.NonNull:example.Nullable.Lombok将添加 nullable 或 NotNull 到任何有定义的注释。
最后,我们有 lombok.addSuppressWarnings,如果 true,Lombok停止添加注释 @SuppressWarnings(“all”), 这是当前的默认行为。如果我们在生成的代码上使用静态分析器,这很有用。
4.2.其他配置键
作为第一个特定功能键lombok.accessors.chain,如果 true,更改setter方法的行为。而不是 void返回, 这些方法将会返回 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使Lombok删除前缀 set 和 get 只使用属性名称来命名它们。
这个 lombok.log.fieldName 键在用户配置时更改生成的日志字段的名称。默认情况下 lombok.log.fieldName主要用途为日志 字段命名,但在我们的示例中,我们将其更改为 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;
}
}
下一个是lombok.(featureName).flagUsage。这组属性具有 warning, error和 allow 作为可选值。 我们可以使用它们来控制在我们的项目中允许使用哪些 Lombok 功能.例如, 如果使用任何实验特征,可以用 实验的experimental 和值 warning 在日志中输出消息:
/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。该属性不同,因为它表示完全限定的注释类型列表。当添加到字段时,Lombok会将这些注释复制到与字段相关的构造函数、getter和setter。 此特性的典型用例是Spring的bean定义,其中注释 @Qualifier 和 @Value 通常必须复制到构造函数参数,其他框架也利用了此功能。
要向列表中添加注释,用户必须使用以下表达式: lombok.copyableAnnotations +=com.test.myAnnotation。库使用上述机制传播可为空的注释:
@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...
}
最后,我们有一个清除lombok.(anyConfigKey)指令。它将任何配置密钥恢复为其默认值。如果有人更改了任何父配置文件中给定键的值,它现在将被忽略。我们可以使用指令 清除 后面跟的任何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的配置系统,它的不同属性,以及它们如何影响其功能。尽管如前所述,还有更多的选项可用,但我们只查看了最常见的选项。请随时查看 Lombok页面.
通常,本文中使用的所有代码示例都可用 在GitHub上.
- 本文标签: Java lombok
- 本文链接: https://www.v8en.com/article/284
- 版权声明: 本文由SIMON原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权