有没有办法告诉 Lombok 不要复制字段注释?
Is there a way to tell Lombok to NOT copy field annotations?
我正在使用 Spring Boot 和 Lombock,我有一个用一些字符串属性初始化的 bean,并将它们提供给其他 classes:
@Getter
@Configuration
@PropertySource(value = "classpath:texts.properties")
public class TextProvider {
@Value("${some.text.value}")
private String text1;
@Value("${other.text.value}")
private String text2;
}
当 Lombok 为此 class 创建 getter 时,它会将 @Value 注释复制到 get 方法,导致 Spring 的 AutowiredAnnotationBeanPostProcessor 在系统上打印以下信息启动:
“Autowired 注释只能用于带有参数的方法:” + method。
有没有办法不将这些注释复制到 getter?
为什么不在 All Args 构造函数中使用 @Value
注释?
喜欢
@Getter
@Configuration
@PropertySource(value = "classpath:texts.properties")
public class TextProvider {
private String text1;
private String text2;
public TextProvider(@Value("${some.text.value}") String text1,@Value("${other.text.value}") String text2){
this.text1 = text1;
this.text2 = text2;
}
}
这样spring很开心,你仍然可以使用@Getter
Lombok的注释。
默认情况下,Lombok 不会创建一个已经编码的方法,因此您可以简单地编写自己的方法getter。
缺点是Lombok在这种情况下会产生一个警告,所以最好通过指定AccessLevel.NONE实际告诉Lombok不要去想它,所以:
@Getter
@Configuration
@PropertySource(value = "classpath:texts.properties")
public class TextProvider {
@Value("${some.text.value}")
@Getter(AccessLevel.NONE)
private String text1;
@Value("${other.text.value}")
@Getter(AccessLevel.NONE)
private String text2;
public String getText1()
{
return text1;
}
public String getText2()
{
return text2;
}
}
当然,严格来说,对于这个例子,这使得在 class 级别使用 @Getter 完全没用 - 但这是 class 的一般情况的方法有很多属性。
我总是建议不要使用 @Value
注释从 属性 文件中检索值。为此使用 属性 class:
@ConfigurationProperties(...)
@Getter
public class TextProperties {
private String text1;
private String text2;
}
现在阅读您的配置 class:
@Configuration
@PropertySource(value = "classpath:texts.properties")
@EnableConfigurationProperties(TextProperties.class)
public class TextProvider {
...
}
这样,您就可以在任何需要的地方自动装配 TextProperties
:
@Autowired
private TextProperties textProperties
阅读 here 了解更多信息,尤其是关于如何配置 @ConfigurationProperties
注释以及如何命名属性的信息。
我正在使用 Spring Boot 和 Lombock,我有一个用一些字符串属性初始化的 bean,并将它们提供给其他 classes:
@Getter
@Configuration
@PropertySource(value = "classpath:texts.properties")
public class TextProvider {
@Value("${some.text.value}")
private String text1;
@Value("${other.text.value}")
private String text2;
}
当 Lombok 为此 class 创建 getter 时,它会将 @Value 注释复制到 get 方法,导致 Spring 的 AutowiredAnnotationBeanPostProcessor 在系统上打印以下信息启动: “Autowired 注释只能用于带有参数的方法:” + method。
有没有办法不将这些注释复制到 getter?
为什么不在 All Args 构造函数中使用 @Value
注释?
喜欢
@Getter
@Configuration
@PropertySource(value = "classpath:texts.properties")
public class TextProvider {
private String text1;
private String text2;
public TextProvider(@Value("${some.text.value}") String text1,@Value("${other.text.value}") String text2){
this.text1 = text1;
this.text2 = text2;
}
}
这样spring很开心,你仍然可以使用@Getter
Lombok的注释。
默认情况下,Lombok 不会创建一个已经编码的方法,因此您可以简单地编写自己的方法getter。
缺点是Lombok在这种情况下会产生一个警告,所以最好通过指定AccessLevel.NONE实际告诉Lombok不要去想它,所以:
@Getter
@Configuration
@PropertySource(value = "classpath:texts.properties")
public class TextProvider {
@Value("${some.text.value}")
@Getter(AccessLevel.NONE)
private String text1;
@Value("${other.text.value}")
@Getter(AccessLevel.NONE)
private String text2;
public String getText1()
{
return text1;
}
public String getText2()
{
return text2;
}
}
当然,严格来说,对于这个例子,这使得在 class 级别使用 @Getter 完全没用 - 但这是 class 的一般情况的方法有很多属性。
我总是建议不要使用 @Value
注释从 属性 文件中检索值。为此使用 属性 class:
@ConfigurationProperties(...)
@Getter
public class TextProperties {
private String text1;
private String text2;
}
现在阅读您的配置 class:
@Configuration
@PropertySource(value = "classpath:texts.properties")
@EnableConfigurationProperties(TextProperties.class)
public class TextProvider {
...
}
这样,您就可以在任何需要的地方自动装配 TextProperties
:
@Autowired
private TextProperties textProperties
阅读 here 了解更多信息,尤其是关于如何配置 @ConfigurationProperties
注释以及如何命名属性的信息。