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

Spring中@Autowired与XML构造嵌套Bean的注入优先级问题

现象原因拆解

你遇到的情况和注入优先级无关,是Spring Bean生命周期的执行顺序以及注解配置的作用范围共同导致的,具体执行流程如下:

  • Spring容器首先加载XML配置,根据你定义的id为car的Bean规则,调用Car类的有参构造方法,传入你嵌套定义的MRF品牌Tyre Bean,此时Car实例内部的tyre字段值确实是MRF。
  • 实例化阶段结束后,Spring会进入Bean的属性填充阶段:只要是Spring托管的Bean,都会被内置的AutowiredAnnotationBeanPostProcessor扫描,识别到类中被@Autowired标注的tyre字段,就会按照类型+名称匹配到全局唯一的id为tyre的CEAT品牌Tyre Bean,通过反射直接给tyre字段赋值,直接覆盖了构造方法阶段设置的MRF值。

常见误区说明

你误以为是XML构造注入优先级低于@Autowired,本质是两个操作不在同一个生命周期阶段:

  • 构造方法注入属于实例化阶段的操作,作用是生成Bean的基础实例
  • @Autowired字段注入属于实例化完成后的属性填充阶段的操作,执行时机晚于构造方法,赋值自然会覆盖之前的字段值

修复方案

如果要保留构造方法传入的MRF品牌Tyre,选任意一种方式即可:

  • 去掉Car类tyre字段上的@Autowired注解,关闭字段自动注入逻辑
  • 如果保留@Autowired注解,可给XML中全局tyre Bean设置autowire-candidate="false",让其不参与自动注入匹配
  • 也可将XML中嵌套的Tyre Bean设置id为tyre,覆盖全局的CEAT品牌Tyre Bean,自动注入时就会匹配到MRF的实例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 07:45:03