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

Spring如何通过反射创建仅含单参构造器的Bean?

Spring构造器注入下的Bean创建流程(针对你的代码场景)

先看你的代码:

@Component
public class A {
} 

@Component
public class B{
    private A a;

    @Autowired
    public B( A a){
        this.a = a;
    }
}

针对这个场景,Spring通过反射创建B的Bean实例的步骤是这样的:

  • 第一步:Spring启动时,会扫描所有带@Component注解的类,把A和B都注册成容器里的Bean定义。
  • 第二步:处理B的Bean定义时,Spring发现它的构造器被标记了@Autowired,就确定用这个带参数的构造器来创建B的实例。
  • 第三步:Spring解析构造器的参数——这里是A类型,它会先检查容器里有没有A的Bean实例:如果还没创建,就先调用A的无参构造器(A只有默认的无参构造),通过反射创建A的实例并放入容器。
  • 第四步:Spring通过Java反射API获取B的这个带A参数的构造器对象,然后把已经准备好的A实例作为参数传入,调用构造器的newInstance()方法,直接创建出B的实例,同时完成了A的注入(不需要后续再给属性赋值)。
  • 第五步:把创建好的B实例存入Spring容器,后续就可以被其他组件引用了。

补充个小知识点:从Spring 4.3版本开始,如果一个类只有一个带参数的构造器,哪怕你不加@Autowired注解,Spring也会自动用这个构造器做依赖注入,逻辑和上面完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 19:12:26