依赖注入的三种方式 依赖注入的三种方式

依赖注入的三种方式

  • 依赖注入:减小对象之间的耦合,通过spring来对对象内的属性赋值
  • 依赖注入的数据类型:
    1. 基本数据类型和String类型
    2. 其他bean类型(在配置文件中或者注解配置过的bean)
    3. 复杂类型和集合类型

通过构造函数注入

  • ==前提==:
    1. 构造函数注入的属性最好不经常发生改变
    2. 类中提供了有参的构造函数
  • 构造函数注入:
    • 使用的标签:
    • 标签出现的位置:标签的内部
    • 标签中的属性:
      • type:指定要注入构造函数参数的数据类型,当存在多个相同数据类型的参数时会报错——==不推荐使用==
      • index:指定要注入构造函数的参数的索引,从0开始——==不推荐使用==
      • name:指定要注入构造函数的参数的名称——==常用==
      • ——————————————————————————————————————
      • value:注入基本数据类型和String数据类型的值
      • ref:根据id注入复杂数据类型(在IOC容器中的bean)
  • 注入方式:
1
2
3
4
5
6
7
8
xml复制代码<!--被注入的bean-->
<bean id="xxx" class="xx.xx.xx">
<construtcor name="xx1" value="1"></construtcor>
<constructor name="xx2" value="2"></constructor>
<constructor name="xx3" ref="now"></constructor><!--引入容器中的日期对象-->
</bean>
<!--配置一个日期对象-->
<bean id="now" class="java.util.Date"></bean>
  • 构造函数注入的优势:在获取bean对象时,注入数据时必须的操作,否则对象无法成功创建
  • 构造函数注入的劣势:改变了bean的实例化方式,使我们在创建bean对象时,如果用不到这些数据,也必须提供

通过set方法注入

  • ==前提==:在类中提供了set方法
  • set方法注入:
    • 使用的标签:
    • 标签位置:标签内部
    • 标签属性
      • name:用于指定属性名称(set方法后的名称,首字母变小写)
      • value:注入基本数据和String
      • ref:引入复杂的数据类型和集合类型
  • 注入方式:
1
2
3
4
5
xml复制代码<bean id="xx" class="xx.xx.xx">
<property name="name" value="周杰伦"></property>
<property name="age" value="18"></property>
<property name="birthday" ref="now"></property><!--引入复杂数据类型-->
</bean>
  • set方法注入的优势:创建对象时没有明确的限制,可以使用默认的构造函数
  • set方法注入的劣势:如果有某个成员必须有值,则获取对象时,有可能set方法没有执行

注入集合类型

  • 使用的标签:结构相同的标签可以互换
    • ,,:用于给list结构集合注入的标签
  • 标签位置:标签内部
  • 注入方式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
xml复制代码<bean id="xx" class="xx.xx.xx">
<!--注入list结构的集合数据-->
<property name="array">
<array>
<value>aaa</value>
<value>bbb</value>
</array>
</property>
<property name="list">
<list>
<value>aaa</value>
<value>bbb</value>
</list>
</property>
<property name="set">
<set>
<value>aaa</value>
<value>bbb</value>
</set>
</property>

<!--注入Map结构的集合数据-->
<property id="map">
<map>
<entry key="xxA" value="aaa"></entry>
<entry key="xxB">bbb</entry><!--value写哪都可以(属性或标签体内)-->
</map>
</property>
<property name="props">
<props>
<prop key="xxA">aaa</prop>
<prop key="xxb">bbb</prop>
</props>
</property>
</bean>

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%