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

Spring构造器依赖注入中@Value注解的含义与作用解析

@Value注解作用及默认值问题解答

直接给结论:

  • 构造器参数上的@Value("For all my running, I can understand")作用很明确:告诉Spring容器,调用这个构造器创建Inspiration实例的时候,直接把注解里写的这个字符串传给lyric参数,最终赋值给类的lyric成员变量。
  • 这个配置根本不是lyric参数的默认值,它是写死的注入值,只要Spring走这个构造器建Bean,lyric就会被设成这个字符串。你在类里给lyric写的初始值"I can keep the door cracked open, to let light through"会被构造器的赋值直接覆盖,完全不会生效。

补充说明

  • @Value如果直接写普通字符串、不用${}读配置、不用#{}写SpEL表达式,传的就是固定字面量,没有什么兜底逻辑,就是明确要注入的值。
  • 真正的@Value默认值只有搭配配置占位符的时候才存在,写法是@Value("${lyric.content:默认值内容}"):这种情况Spring会先找配置里lyric.content对应的值,只有找不到这个配置项的时候,才会用冒号后面的内容当兜底默认值。你现在的写法根本没用到占位符,和默认值逻辑完全不沾边。
  • 你这个类只有一个带参构造器,Spring 4.3之后不用额外加@Autowired,会自动选这个构造器注入,参数值直接取@Value里写的内容就行。

跑个测试就能验证:把这个Bean丢到Spring上下文里,调用getLyric()拿到的结果永远是For all my running, I can understand,类里写的字段初始值根本没机会用到。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:06:26