在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;
}
1条答案
按热度按时间lf5gs5x21#
是的,这是等价的。
@Lazy
javadoc声明:除了用于组件初始化之外,此注解还可以放置在标记为
org.springframework.beans.factory.annotation.Autowired
或javax.inject.Inject
的注入点上:在这种情况下,它会导致为所有受影响的依赖项创建一个延迟解析代理,作为using org.springframework.beans.factory.ObjectFactory
或javax.inject.Provider
的替代方案。重要的部分是:
这将导致为所有受影响的依赖项创建延迟解析代理
在依赖项方面,你的
DogService
bean在任何情况下都有两个自动连接的依赖项:CatService catService
和MouseService mouseService
。因此,单独注解构造函数或所有参数将产生相同的结果:这两个依赖性将被延迟加载。
注意:我已经测试过了,两种情况下的行为完全相同。