2026-05-15 04:30:00
Spring的依赖注入详解
一、什么是依赖注入
依赖注入(Dependency Injection, DI)是控制反转(Inversion of Control, IOC)的一种实现方式。控制反转是一种设计思想,它强调将对象的控制权交给外部容器或框架,而不是在对象内部通过new关键字创建依赖对象。依赖注入则是Spring框架用来实现这种控制反转的具体技术手段。
二、依赖注入与控制反转的关系
它们之间的关系就像:“我决定不自己做饭了”(IOC) → “我点了外卖,外卖小哥送到家里”(DI)。即IOC是“把控制权交出去”的决策,而DI则是“外卖小哥送外卖”的具体实现过程。
三、依赖注入的类型
Spring主要支持三种依赖注入方式:
四、Spring实现依赖注入的底层原理
Spring实现依赖注入的底层原理主要包括以下几个步骤:
Bean定义:Spring启动时会扫描配置类或XML文件,找到所有的Bean定义。这些Bean定义描述了需要被Spring容器管理的对象及其依赖关系。

或者传统的XML配置:
创建对象(实例化):Spring会通过反射机制创建这些Bean定义所对应的对象实例。但此时还没有注入依赖关系。
注入依赖:接下来,Spring会根据注解或XML配置中的依赖关系,将依赖对象注入到被依赖对象中。这可以通过属性注入、构造器注入或Setter注入等方式实现。

在上面的示例中,Spring会自动找到PaymentService的Bean,并将其注入到OrderService的构造器中。
五、面试中如何回答“Spring的依赖注入”
在面试中,当被问到“Spring的依赖注入”时,可以参考以下回答模板:
“在Spring中,依赖注入(Dependency Injection)是一种实现控制反转(IOC)的技术手段。通过将对象所依赖的资源(如其他Bean)交由Spring容器管理,从而解耦组件之间的关系,提升系统的可维护性和扩展性。
Spring主要支持三种依赖注入方式:构造器注入(推荐方式,适用于必填依赖,利于单元测试)、Setter方法注入(适用于可选依赖)和字段注入(使用@Autowired注解,最简便,但不利于测试)。
Spring容器在初始化时,会扫描并注册所有的Bean定义,然后根据依赖关系完成注入。依赖查找使用的是类型优先的方式,必要时可结合@Qualifier、@Primary来解决冲突。”
六、延伸面试问题合集
在面试中,除了基本的依赖注入问题外,面试官还可能会提出以下延伸问题:
对于这些问题,需要深入理解Spring框架的底层原理和依赖注入的实现机制,才能给出准确而全面的回答。
七、实战演练:自己动手写个简易版IOC容器
要真正理解依赖注入,强烈推荐自己动手写一个简易版的IOC容器。通过这个过程,可以更加深入地理解依赖注入的本质和Spring框架的底层实现原理。
以下是一个极简的IOC容器示例:

然后:

这就是最简单的“手动IOC”模型。通过这个示例,可以感受到依赖注入的本质:创建对象 → 注册到容器 → 从容器获取 → 注入使用。
总结
依赖注入是Spring框架中实现控制反转的重要技术手段。通过深入理解依赖注入的原理和类型,以及Spring框架的底层实现机制,可以更好地应用Spring框架进行开发,并提升系统的可维护性和扩展性。同时,通过自己动手写一个简易版的IOC容器,可以更加深入地理解依赖注入的本质和Spring框架的底层原理。