spring的依赖注入

什么是依赖注入?

依赖注入的全名为Dependency Injection,依赖关系的维护就称之为依赖注入,能注入的数据有三类:基本类型和String、其他bean类型(在配置文件中或者注解配置过的bean)、复杂类型(也叫集合类型),注入的方式有三种:使用构造函数提供、使用set方法提供、使用注解提供

依赖的注入

1、构造函数的注入

构造函数的注入我们需要使用constructor-arg标签,该标签使用的为止是在bean标签内部,该标签中的属性都有,如下五个

  1. type:用于执行要注入的数据的数据类型,该数据类型也是构造函数中某个或某些参数的类型
  2. index:用于指定要注入的数据给构造函数中指定索引位置的参数赋值,索引从0开始
  3. name:用于给构造函数中指定名称的参数赋值
  4. value:用于提供基本类型和String类型的数据
  5. ref:用于指定其他的bean类型的数据。它指的就是spring的Ioc核心容器中出现过的bean对象

当我们的bean对象有成员变量时,并且只有一个有参构造的时候,如果我们想创建bean对象的时候,就必须使用构造函数的参数注入,不然无法创建对象,
我们想创建的bean对象的类如下
在这里插入图片描述
这个时候,我们的配置文件已经报错了
在这里插入图片描述
这个时候我们给构造函数中的参数进行依赖注入,
在这里插入图片描述
这样我们把所有参构造中的参数都传入进去后,配置文件也就不会报错了,然后成功调用spring容器中的对象
在这里插入图片描述

构造函数的依赖注入的优势

在获取bean对象时,注入数据时必须的操作,否则无法创建成功

构造函数的依赖注入的弊端

改变了bean对象的实例化方式,是我们在创建对象时,如果用不到这些数据,也必须提供

2、set方法注入(set注入只要有set方法就可以注入,如果含有参数会从ioc容器中查找,按规则填充)

set方法注入,涉及到的标签是property,它使用的位置是bean标签的内部,该标签包含的属性有:name、value、ref

  1. name:用于指定对应的成员变量的属性名
  2. value:用于体统基本类型和String类型的数据
  3. ref:用于指定其他的bean类型的数据。它指的就是再spring的Ioc核心容器中出现过的bean对象

什么又是成员变量呢?
成员变量就是我们印象中的类中的那个成员变量。

那什么又是属性呢?
属性就是setter和getter方法截取后的产物
例如getUsername( )这个get方法,我们截取除了get和括号的内容然后全部小写,的到的就是属性,也就是username

举例说明,当我们成员变量和属性名相同时,如下
在这里插入图片描述
如果属性名和成员变量不同的话,我们就更能看出区别
在这里插入图片描述
在这里插入图片描述

set方法注入的优势

解决了构造方法注入的弊端问题,创建对象时没有明确的限制了,我们就可以直接使用某人构造函数就行

set方法的弊端

如果有某个成员必须有值,则获取对象时有可能我们的set方法没有执行

3、注入集合数据

复杂类型的注入,也成为集合类型的注入,这里我么依然采用set方法的注入
用于给List结构的集合注入的标签:list、array、set
用于给Map结构的集合注入的标签:map、props
结论:
结构相同,标签可以互换
在这里插入图片描述
在这里插入图片描述
运行得到的结果如下
在这里插入图片描述

posted @ 2021-01-13 11:30  谢海川  阅读(74)  评论(0)    收藏  举报