一文讲懂Spring中的依赖注入

768 阅读2分钟

容器在创建 bean 时注入那些依赖项。从根本上讲,此过程是通过使用类的直接构造或服务定位器模式来自己控制其依赖关系的实例化或位置的 Bean 本身的逆过程(因此称为 Control Inversion)。

所以依赖注入是把bean添加到IOC容器,我们来看看依赖注入相关的知识点吧

  1. 依赖注入有两大类手动注入和自动注入,分别有哪些实现方式?依赖注入按类型区分又有哪些

手动注入 : xml、Java注解等
自动注入 : Autowiring注解

按类型区分:

  • Setter
  • 构造器
  • 接口注入
  • 方法注入
  1. 你知道自动装配有哪些模式吗?有哪些局限性呢?

自动装配有4种模式:

no:默认不进行自动装配,bean的引用使用ref来引用
byName: 通过属性名称来注入。如果一个bean的属性为A,spring会在容器里寻找名称为A的bean byType: 通过属性类型来注入。如果一个bean的属性类型为B,spring会在容器里寻找名称为B的bean。如果bean的类型不唯一,会引发异常
construtor: 通过构造器注入。如果一个bean没有参数构造器,那么会引发异常

局限性:

  • 自动装配不如手动精确,Spring 还是小心避免在可能产生意外结果的模棱两可的情况下进行猜测。SpringManagement 的对象之间的关系不再明确记录。
  • 容器内如果没有唯一的 bean 定义可用,则引发异常。

那你知道方法注入有哪些实现方式吗?

Autowared: 按照类型进行装配
Bean: 产生一个bean对象。将bean对象加入IOC容器
Resource: 按照名称进行装配 Inject: 不常用

那你知道如何选择哪种注入方式吗?

  • 构造器注入:强制依赖类型,低依赖。
  • Setter 方法注入:非很强的强制依赖类型(无依赖顺序),多依赖。
  • 方法注入:常用于声明类
  • 接口回调注入:业务中常用于写一些主键啥的。

你知道怎么解决多个类型相同的bean注册到Spring容器的使用问题?

可以用@Qualifier解决,指定名称