1. DI:dependency injection:依赖注入。依赖注入和IOC是一件事不同的说法,对象的创建是依赖于容器的,对象属性的设置也是依赖于容器的。程序中被动接收对象,对象的属性值也是被动设置的。这个过程在spring称为注入。所以IOC又叫依赖注入(有容器来创建和管理对象)。
2.DI 和 IOC的区别:
DI (依赖注入) 更侧重于过程, 把对象通过setter、contruct、args等方式 注入到另一个对象中作为这个对象的一个成员变量(也可能是其他);
IOC(控制反转): 侧重于结果,说的是对象的产生不是通过直接new 的,而是通过依赖注入的方式的。
3.Spring的依赖注入分为两类:
- 构造器注入
- setter注入
4.Spring 中不同类型的属性如何注入:
- 基本类型通过value直接注入
<bean id="user" class="cn.wh.vo.User"> <!-- 字符串和基本类型的数据可以直接注入 --> <property name="name" value="张三疯"/> <property name="age" value="218"/> </bean>
- 数组注入
<!-- 数组的注入 --> <property name="hobbies"> <array> <value>乒乓球</value> <value>羽毛球</value> <value>斯洛克</value> </array> </property>
或者
<!-- 数组的注入 --> <property name="hobbies"> <list> <value>乒乓球</value> <value>羽毛球</value> <value>斯洛克</value> </list> </property>
注意:list和数组的注入一致。
-
set集合的注入
<!-- Set集合的注入 重复的数据会自动覆盖--> <property name="qqs"> <set> <value>261042456</value> <value>78234322</value> <value>8982342</value> <value>8982342</value> <value>898234201</value> </set> </property>
- map的注入
<!-- map的注入 --> <property name="cards"> <map> <entry key="6221231212323" value="农业银行"></entry> <entry key="23421341324"> <value>工商银行</value> </entry> </map> </property>
- properties的注入
<!-- properties的注入 --> <property name="props"> <props> <prop key="height">180cm</prop> <prop key="weight">90kg</prop> <prop key="sanwei">80,80,80</prop> </props> </property>
- 自定义类型的注入
<!-- 自定义的注入 --> <property name="role" ref="role"/> </bean> <bean id="role" class="cn.wh.vo.Role"> <property name="id" value="1"/> <property name="name" value="管理员"/> </bean>
- Null的注入
<property name="name"><null/></property>
- p命名空间注入,需要导入对应的schema头文件
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
配置:
<!-- 使用p命名空间注入 --> <bean id="r1" class="cn.wh.vo.Role" p:id="1" p:name="管理员"></bean>
-
c命名空间注入,(新增功能)需要导入对应的schema头文件
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
- c命名空间注入,其本质式构造器注入,所以需要对应的构造方法存在。
<!-- c命名空间注入 --> <bean id="r2" class="cn.wh.vo.Role" c:id="1" c:name="管理员"></bean>