【问题标题】:How to use @Lazy annotation in a class constructor with Lombok?如何在带有 Lombok 的类构造函数中使用 @Lazy 注释?
【发布时间】:2019-12-27 19:26:37
【问题描述】:

给定一个 AnimalService 类:

public class AnimalService{

      private DogService dogService;

      private AnimalService(@Lazy DogService dogService){
          this.dogService = dogService;
      }
    }
}

在这种情况下,如果我想使用 Lombok 注释,有没有办法保持 @Lazy 加载?

下面的代码会和上面的代码做同样的事情吗?

@AllArgsConstructor
public class AnimalService{
  @Lazy
  private DogService dogService;
}

@Lazy
public class DogService{
//code
}

这是在 Lombok 中使用 @Lazy 注释的合适方式吗?

【问题讨论】:

  • 你为什么不直接测试一下?如果它有效,那么它是合法的(可能是一些弹簧魔法将构造函数参数与字段匹配以获得适当的注释)。但是,我认为不会,那么您必须将@Lazy 放入lombok.copyableAnnotations
  • 我测试过,但我不确定结果。这就是为什么我在这里试图找出正确的方法

标签: spring lazy-loading lombok


【解决方案1】:

它不会开箱即用,但您可以配置 Lombok 以将 @Lazy 注释从字段复制到构造函数的参数。

lombok.config

lombok.copyableAnnotations += org.springframework.context.annotation.Lazy

lombok.config 应放在项目的根目录或 src 文件夹中。

【讨论】:

    【解决方案2】:

    如果您只希望它用于单个类而不进行全局 Lombok 配置,您可以使用以下 sn-p:

    @AllArgsConstructor(onConstructor = @__(@Lazy))
    public class AnimalService{
      @Lazy
      private DogService dogService;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-20
      • 2018-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多