You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring中组件构造器标注@Lazy与给每个参数标注是否等效?

关于Spring中@Lazy注解在构造器上的使用问题

问题1:在组件构造器上使用@Lazy注解,是否等同于给该构造器的每个参数都标注@Lazy?

答案是肯定的。当你直接在组件的构造器上标注@Lazy时,Spring会自动把懒加载的规则应用到这个构造器的所有参数依赖上,效果和给每个参数单独添加@Lazy注解完全一致。

这种设计是Spring为了简化配置而做的优化——如果某个组件的所有依赖都需要懒加载,你不用逐个给参数加注解,直接在构造器上标一次就能搞定所有参数的懒加载配置。

问题2:两种DogService构造器写法是否等效?

这两种写法完全等效,在Spring容器中的行为没有任何区别。

第一种逐个参数标注的写法:

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

两种写法都会让CatService和MouseService被延迟初始化:只有当DogService实际被调用、需要注入这两个依赖时,Spring才会去创建它们的实例。

额外补充个细节:如果构造器上标了@Lazy,同时某个参数单独标注@Lazy(false),那这个参数的配置会覆盖构造器的全局设置,该依赖会被立即初始化——不过这属于特殊场景,日常开发中很少用到。


内容的提问来源于stack exchange,提问作者Michiel Haisma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:22:03