在组件构造函数上使用“@Lazy”是否等于注释每个参数?

2023-12-29

在春天,考虑@Service类,具有以下自动装配构造函数:

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;
}

是的,这是等价的。

The @Lazy javadoc https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/Lazy.html状态 :

该注解除了用于组件初始化之外, 也可以放置在标有org.springframework.beans.factory.annotation.Autowired or javax.inject.Inject:在这种情况下,它导致创建一个 作为替代方案,所有受影响的依赖项的惰性解析代理 到using org.springframework.beans.factory.ObjectFactory or javax.inject.Provider.

重要的部分是:

它会导致为所有受影响的人创建一个延迟解析代理 依赖关系

就依赖关系而言,你的DogService无论如何,bean 有两个自动装配:CatService catService and MouseService mouseService.
因此,单独注释构造函数或所有参数将产生相同的结果:两个依赖项将被延迟加载。

Note:我已经测试过它们,两种情况下的行为完全相同。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在组件构造函数上使用“@Lazy”是否等于注释每个参数? 的相关文章

随机推荐