1.依赖注入的概念:作用:给创建好的对象中的全局的属性或者对象进行赋值的操作
2.DI的意义:解除类与类之间高耦合性,给对象中全局对象赋值的操作
3.DI和IOC的关系:是同一个事情
Spring帮助创建对象的过程叫做IoC,创建对象时给对象中全局对象赋值叫做DI,所以认为IoC和DI是同一个事情.
DI注入的方式(三种):
A、使用set方法:在实体类中给属性增加set方法
<!--【A】使用set方法进行DI注入-->
<!--
name:对象的属性名
value和ref的使用场景
value: 如果注入的属性类型是基本数据类型(包含String)使用value
ref:如果注入的属性类型是对象这个时候使用ref
-->
<bean id="stu" class="com.bjsxt.spring4.Student">
<property name="name" value="lisi"></property>
<property name="sex" value="男"></property>
<property name="age" value="20"></property>
<property name="clazz" ref="cla"></property>
</bean>
B、使用有参构造器:clazz作为Student类中的属性。clazz本身是一个类。这里可以看做是Student类中的对象
<!--【B】有参构造方式进行注入-->
<bean id="cla" class="com.bjsxt.spring4.Clazz">
<constructor-arg name="cname" value="java1班"></constructor-arg>
<constructor-arg name="clazzno" value="507"></constructor-arg>
</bean>
<bean id="stu" class="com.bjsxt.spring4.Student">
<constructor-arg name="age" value="18"></constructor-arg>
<constructor-arg name="name" value="zs"></constructor-arg>
<constructor-arg name="sex" value="男"></constructor-arg>
<constructor-arg name="clazz" ref="cla"></constructor-arg>
</bean>
C、自动注入:主要为对象
<!--【C】DI中的自动注入-->
<!--
底层走的是set方法
byName:这个时候就会在当前的xml中寻找【bean的ID名称】和需要注入实体中的【属性名】一致,进行匹配注入
byType:这个时候就会在当前的xml中寻找【bean标签的类型】和需要注入实体中的【属性的类型】一致,进行匹配注入
底层走的是构造器
constructor:这个时候首先会根据[有参构造器的形参名]名称进行查找,如果名称没有一致的,在根据类型[有参构造器的类型]进行查找
需要注意:*在指定的类中必须提供合适的有参构造器才可以
-->
<bean id="stu" class="com.bjsxt.spring4.Student" autowire="constructor"></bean>
DI其他类型值的注入:基本类型和对象类型为以上方式
A、基本类型(String)
B、对象类型
C、数组
D、List
E、set
F、Map
<bean id="user" class="com.bjsxt.spring4.User">
<--1.数组-->
<property name="arr">
<array>
<value>流沙</value>
<value>韩非</value>
</array>
</property>
<--2.list集合-->
<property name="list">
<list>
<value>百越</value>
<value>焰灵姬</value>
</list>
</property>
<--3.set集合-->
<property name="se">
<set>
<value>天行</value>
<value>卫庄</value>
</set>
</property>
<--4.map集合-->
<property name="map">
<map>
<entry>
<key>
<value>天行</value>
</key>
<value>九歌</value>
</entry>
</map>
</property>
</bean>