Spring 支持 3 种依赖注入的方式
属性注入
构造器注入
工厂方法注入(很少使用,不推荐)
属性注入
<bean id="helloword" class="com.xzcl.helloword.helloword">
<property name="userName" value="xzcl"></propety>
</bean>
属性注入使用 元素, 使用 name 属性指定 Bean 的属性名称,value 属性或 子节点指定属性值
构造方法注入
默认顺序给构造函数参数赋值
<bean id="car" class="com.xzcl.spring.beans.Car">
<constructor-arg value="AUDI"></constructor-arg>
<constructor-arg value="Shanghai"></constructor-arg>
<constructor-arg value="22222" ></constructor-arg>
</bean>
或
指定顺序给构造函数参数赋值
<bean id="car" class="com.xzcl.spring.beans.Car">
<constructor-arg value="AUDI" index="0"></constructor-arg>
<constructor-arg value="Shanghai" index="1"></constructor-arg>
<constructor-arg value="22222" index="2"></constructor-arg>
</bean>
或
按类型给构造函数参数赋值
<bean id="car" class="com.xzcl.spring.beans.Car">
<constructor-arg value="AUDI" type="java.lang.String"></constructor-arg>
<constructor-arg value="Shanghai" type="java.lang.String"></constructor-arg>
<constructor-arg value="22222" type="int"></constructor-arg>
</bean>
对应的bean
package com.xzcl.spring.beans;
public class Car {
private String brand;
private String corp;
private int price;
private int maxSpeed;
public Car(String brand, String corp, int price) {
super();
this.brand = brand;
this.corp = corp;
this.price = price;
}
@Override
public String toString() {
return "Car [brand=" + brand + ", corp=" + corp + ", price=" + price
+ ", maxSpeed=" + maxSpeed + "]";
}
}
细节
如和字面值包含特殊字符 可以使用<![CDATA[]]>
把包含起来
<bean id="car1" class="com.xzcl.spring.beans.Car">
<constructor-arg value="AUDI" type="java.lang.String"></constructor-arg>
<constructor-arg type="java.lang.String">
<value><![CDATA[<shanghai^>]]></value>
</constructor-arg>
<constructor-arg value="22222" type="java.lang.Integer"></constructor-arg>
</bean>
属性值也可以用value子节点配置
引入其他的bean
<bean id="person" class="com.xzcl.spring.beans.Person">
<property name="name" value="zhangsan"></property>
<property name="age" value="18"></property>
<!-- 可以使用 property 的 ref 属性 建立bean之间的引用关系-- >
<property name="car" ref="car"></property>
</bean>
第四行中 ref 属性 引用的就是 其他bean的 ID
内部bean方式
<bean id="person2" class="com.xzcl.spring.beans.Person">
<property name="name" value="zhangsan"></property>
<property name="age" value="18"></property>
<property name="car" >
<bean class="com.xzcl.spring.beans.Car">
<constructor-arg value="AUDI" type="java.lang.String"></constructor-arg>
<constructor-arg value="Shanghai" type="java.lang.String"></constructor-arg>
<constructor-arg value="22222" type="int"></constructor-arg>
</bean>
</property>
</bean>
list类型的属性如和赋值
<bean id="person3" class="com.xzcl.spring.beans.collection.Person">
<property name="name" value="lisi"></property>
<property name="age" value="19"></property>
<property name="cars" >
<!--使用List节点 为list 类型的属性赋值 -->
<list>
<ref bean="car" />
<ref bean="car1"/>
</list>
</property>
</bean>
map类型的属性如和赋值
<!-- 配置map属性值 -->
<bean id="personnew" class="com.xzcl.spring.beans.collection.Person2">
<property name="name" value="lisi"></property>
<property name="age" value="19"></property>
<property name="cars">
<map>
<entry key="AA" value-ref="car"></entry>
<entry key="BB" value-ref="car1"></entry>
</map>
</property>
</bean>
Properties类型的属性如和赋值
<!--配置Properties 属性值 -->
<bean id="dataSource" class="com.xzcl.spring.beans.collection.DataSource">
<property name="properties">
<!-- 使用 props 和 prop子节点为properties 属性赋值 -->
<props>
<prop key="user">root</prop>
<prop key="password">xzcl1230</prop>
<prop key="jdbcurl">jdbc:mysql:///test</prop>
<prop key="driverClass">com.mysql.jdbc.drives</prop>
</props>
</property>
</bean>
配置独立的集合bean,以供多个bean进行引用
<!--配置独立的集合bean ,以供多个bean进行引用 ,需要导入util命名空间-->
<util:list id="cars">
<ref bean="car"/>
<ref bean="car1"/>
</util:list>