如何在带有 Lombok 的类构造函数中使用 @Lazy 注释?

bla*_*ack 5 spring lazy-loading lombok

给定一个类 AnimalService:

public class AnimalService{

      private DogService dogService;

      private AnimalService(@Lazy DogService dogService){
          this.dogService = dogService;
      }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

@Lazy
public class DogService{
//code
}
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*ski 16

如果您只想将其用于单个类而不进行全局 Lombok 配置,您可以使用以下代码片段:

@AllArgsConstructor(onConstructor = @__(@Lazy))
public class AnimalService{
  @Lazy
  private DogService dogService;
}
Run Code Online (Sandbox Code Playgroud)

  • 根据 Lombok API 文档,对于 JDK8+,推荐的方式是 `onConstructor_ ={@Lazy}`。对于 JDK7 来说是 `onConstructor = @__(@Lazy)`。https://github.com/projectlombok/lombok/blob/master/src/core/lombok/AllArgsConstructor.java。 (4认同)

Maf*_*for 11

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

lombok.config

lombok.copyableAnnotations += org.springframework.context.annotation.Lazy
Run Code Online (Sandbox Code Playgroud)

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