Spring Boot 在组件构造函数上使用`@Lazy`等于注解每个参数吗?

piok6c0g  于 2023-03-23  发布在  Spring
关注(0)|答案(1)|浏览(201)

在Spring中,考虑一个@Service类,它具有以下autowired构造函数:

public DogService(@Lazy CatService catService, @Lazy MouseService mouseService) {
  this.catService = catService;
  this.mouseService = mouseService;
}

这相当于?

@Lazy
public DogService(CatService catService, MouseService mouseService) {
  this.catService = catService;
  this.mouseService = mouseService;
}
lf5gs5x2

lf5gs5x21#

是的,这是等价的。
@Lazy javadoc声明:
除了用于组件初始化之外,此注解还可以放置在标记为org.springframework.beans.factory.annotation.Autowiredjavax.inject.Inject的注入点上:在这种情况下,它会导致为所有受影响的依赖项创建一个延迟解析代理,作为using org.springframework.beans.factory.ObjectFactoryjavax.inject.Provider的替代方案。
重要的部分是:

这将导致为所有受影响的依赖项创建延迟解析代理

在依赖项方面,你的DogService bean在任何情况下都有两个自动连接的依赖项:CatService catServiceMouseService mouseService
因此,单独注解构造函数或所有参数将产生相同的结果:这两个依赖性将被延迟加载。

注意:我已经测试过了,两种情况下的行为完全相同。

相关问题