有没有办法告诉 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 注释以及如何命名属性的信息。