DI:依赖注入
依赖:bean对象的创建依赖于容器。
注入:bean对象中的所有属性,由容器来注入。
一、DI注入的核心,Set注入:
所谓Set注入,就是通过set方法来注入,因此,所有属性必须有set方法才可以。
常见Set注入的属性包括:
1.普通数据类型注入
<property name="name" value="小明"></property>
2.bean注入,也就是属性中注入其他对象
<bean id="address" class="Address"> </bean>
<bean id ="student" class="Student">
<property name="address" ref="address"></property>
</bean>
3.数组注入
<property name="books">
<array>
<value>Java</value>
<value>C语言</value>
<value>C++语言</value>
</array>
</property>
4.List集合注入
<property name="hobbys">
<list>
<value>打球</value>
<value>游泳</value>
<value>LOL</value>
</list>
</property>
5.map注入
<property name="card">
<map>
<entry key="身份证" value="12345678"></entry>
<entry key="手机号" value="12345678"></entry>
<entry key="银行卡" value="12345678"></entry>
</map>
</property>
6.Set注入
<property name="games">
<set>
<value>LOL</value>
<value>CS</value>
<value>魔兽</value>
</set>
</property>
7.null注入
<property name="wife">
<null/>
</property>
8.Properties注入
<property name="info">
<props>
<prop key="学号">18</prop>
<prop key="性别">男</prop>
<prop key="身高">180</prop>
</props>
</property>
Set注入的模板大全(直接复制就可用):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="address" class="Address">
</bean>
<bean id="student" class="Student">
<!-- 第一种,普通值注入 -->
<property name="name" value="小明"></property>
<!-- 第二种注入,bean注入-->
<property name="address" ref="address"></property>
<!-- 第三种,数组注入 -->
<property name="books">
<array>
<value>Java</value>
<value>C语言</value>
<value>C++语言</value>
</array>
</property>
<!-- 第四种,List集合注入 -->
<property name="hobbys">
<list>
<value>打球</value>
<value>游泳</value>
<value>LOL</value>
</list>
</property>
<!-- 第五种,map注入 -->
<property name="card">
<map>
<entry key="身份证" value="12345678"></entry>
<entry key="手机号" value="12345678"></entry>
<entry key="银行卡" value="12345678"></entry>
</map>
</property>
<!-- 第六种,Set注入 -->
<property name="games">
<set>
<value>LOL</value>
<value>CS</value>
<value>魔兽</value>
</set>
</property>
<!-- 第七种,null注入 -->
<property name="wife">
<null/>
</property>
<!-- 第八种,Properties注入 -->
<property name="info">
<props>
<prop key="学号">18</prop>
<prop key="性别">男</prop>
<prop key="身高">180</prop>
</props>
</property>
</bean>
</beans>
二、p命名空间的xml注入
p其实就是property的缩写,还是对属性的注入,只不过不需要写property标签了而已,直接在bean标签内就可以定义属性,使用之前需要先导入命名空间:
xmlns:p="http://www.springframework.org/schema/p"
注入示例:
<bean name="p-namespace" class="com.example.ExampleBean"
p:email="someone@somewhere.com"/>
三、c命名空间的xml注入
c其实就是constructor-arg的缩写,其实就是构造器注入,和p命名空间一样,只不过是节省了写constructor标签,可以直接在bean中定义构造器的属性值,使用之前需要先导入命名空间:
xmlns:c="http://www.springframework.org/schema/c"
注入示例:
<bean id="beanOne" class="x.y.ThingOne" c:thingTwo-ref="beanTwo"
c:thingThree-ref="beanThree" c:email="something@somewhere.com"/>