前言
依赖:Bean对象的创建依赖于Spring容器。
注入:Bean对象的所有属性都由Spring容器注入
依赖注入的三种方式:
- 构造器注入
- set方法注入
- 拓展方法注入
一、构造器注入
即实体类有参构造时,向有参构造器中输入属性值。示例
其在.xml配置文件中注入方式为:
<bean id="username" class="com.yumi.User">
<!-- 1.下标赋值 -->
<constructor-arg index="0" value="yumi"></constructor-arg>
</bean>
<bean id="username" class="com.yumi.User">
<!-- 2.类型创建,但是多个参数为同一类型则无法使用 -->
<constructor-arg type="java.lang.String" value="yumi"></constructor-arg>
</bean>
<bean id="username" class="com.yumi.User" name="u1,u2,u3">
<!-- 3.直接通过参数名赋值 -->
<constructor-arg name="username" value="yumi"></constructor-arg>
</bean>
二、set方法注入
即实体类无参构造new User()对象后,再让该对象通过set()方法向实体类中传入属性的值。
罗列不同类型数据在.xml配置文件中的注入方式。
<bean id="address" class="Address"></bean>
<bean id="student" class="Student">
<!-- 1. 普通注入 -->
<property name="name" value="yumi"></property>
<!-- 2. Bean注入 -->
<property name="address" ref="address"></property>
<!-- 3. 数组注入 -->
<property name="books">
<array>
<value>book1</value>
<value>book2</value>
<value>book3</value>
</array>
</property>
<!-- 4. List注入 -->
<property name="hobbys">
<list>
<value>hobby1</value>
<value>hobby2</value>
<value>hobby3</value>
</list>
</property>
<!-- 5. Map注入 -->
<property name="card">
<map>
<entry key="card1" value="0123456"></entry>
<entry key="card2" value="abcdef"></entry>
</map>
</property>
<!-- 6. Set注入 -->
<property name="games">
<set>
<value>game1</value>
<value>game2</value>
<value>game3</value>
</set>
</property>
<!-- 7. null值注入 -->
<property name="balance">
<value>null</value>
</property>
<!-- 8. Properties注入 -->
<property name="info">
<props>
<prop key="key1">value1</prop>
<prop key="key2">value2</prop>
<prop key="key3">value3</prop>
</props>
</property>
</bean>
三、扩展方法注入
1. p-命名空间
对于无参构造,即set方法注入时使用。
- 导入依赖
xmlns:p="http://www.springframework.org/schema/p"
- 格式:简化了property写法。p:属性名=“属性值”
<bean id="username1" class="User" p:username="abc" p:userid="123"/>
2. c-命名空间
对于有参构造,即构造器注入时使用。
- 导入依赖
xmlns:p="http://www.springframework.org/schema/c"
- 格式:简化了constructor-arg写法。c:属性名=“属性值”
<bean id="username2" class="User" c:username="abc" c:userid="123"/>