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

Spring框架中Bean初始化与注入顺序咨询(@Autowired场景)

Spring Bean初始化与注入顺序详解

嘿,作为Spring新手碰到这种Bean注入顺序的问题太正常啦!我来给你把这个逻辑掰扯明白~

首先直接给你结论:正确的顺序是第二种情况,具体流程是:

  • 创建B的实例(调用B的构造方法)
  • 创建A的实例(调用A的构造方法)
  • 将B注入到A的b属性中

为什么是这个顺序?

Spring容器启动时,会先扫描所有标记了@Component的类,把它们注册成Bean定义。之后容器会解析每个Bean的依赖关系——因为你的A类里用@Autowired依赖了B,容器会明确知道:要创建A,必须先有B的实例,不然注入的时候就会找不到依赖。

所以容器会优先实例化被依赖的B,等B完全创建好(构造方法执行完毕),再去实例化A,最后把现成的B实例注入到A的b字段里。

额外补充:不同注入方式的小差异

如果是用构造方法注入(更推荐的方式),流程会更直接:

@Component
class A{
    private final B b;

    @Autowired // Spring 4.3+ 可以省略这个注解
    public A(B b){
        this.b = b;
    }
}

这种情况下,容器必须先创建B的实例,才能调用A的构造方法来创建A,注入动作在A实例化的同时就完成了,顺序还是先B后A。

而你现在用的是字段注入,容器会先实例化A(调用无参构造),再把已经创建好的B注入到A的字段里,本质上依赖的优先级还是B更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:04:03