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

Spring是否支持在父类上使用@Value注解?附代码验证疑问

Spring @Value注解在父类的生效与继承问题

一、@Value是否支持在父类中生效?

Spring的@Value注解支持在父类中生效,只要子类是Spring容器管理的Bean(例如标注了@Component、@Service、@Controller等注解)。

Spring的依赖注入处理器在处理Bean时,会递归扫描当前Bean类的所有父类,查找带有@Value的字段/方法,即使父类的字段是private修饰符,Spring也能通过反射机制完成注入。

二、你提供的代码是否会输出“hello world”?

不会,核心原因是:

  • 代码中的Base和MyClass都没有被标记为Spring容器的Bean,Spring不会自动实例化这个类,@PostConstruct注解修饰的init()方法根本不会被执行,自然不会有任何输出。

如果给MyClass加上@Component注解(确保它被Spring扫描并实例化),那么代码会输出“hello world”:

  • Spring会注入父类Base的someProperty(使用默认值hello,因为app.some.property未配置);
  • 同时注入子类MyClass的otherProperty(使用默认值world);
  • @PostConstruct方法执行后,会打印拼接后的字符串。

补充注意事项

  • 如果父类的字段是private但出现注入失败的极端情况(比如自定义BeanPostProcessor限制了反射访问),可以将字段改为protected,或者提供setter方法并在方法上标注@Value,注入会更稳妥。
  • 若父类本身是Spring Bean(标注了Bean注解),父类的@Value会独立生效,子类继承时会复用父类的字段值(除非子类重写了对应字段)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 22:24:57