Bean的属性注入
构造器注入
<!-- 使用构造器注入属性,依赖的是有参构造 -->
<bean name="car1" class="cn.ade.bean.CarBean">
<constructor-arg index="0" type="java.lang.String" value="红旗"/>
<constructor-arg index="1" type="java.lang.Double" value="1000000"/>
</bean>
public CarBean(String brand, Double price) {
this.brand = brand;
this.price = price;
}
Setter方法注入
<!-- 使用setter方法注入属性 -->
<bean name="car2" class="cn.ade.bean.CarBean">
<property name="brand" value="红旗"/>
<property name="price" value="2000000"/>
<!-- 使用ref属性来引入另一个bean -->
<property name="user" ref="user"/>
</bean>
集合属性注入
- List(数组)、Set、Map、Properties
<!-- 集合属性的注入 -->
<bean name="collectionBean" class="cn.ade.bean.CollectionBean">
<property name="list">
<list>
<value>张三</value>
<value>100</value>
<ref bean="car1"/>
</list>
</property>
<property name="set">
<set>
<value>张三</value>
<value>100</value>
<ref bean="car1"/>
</set>
</property>
<property name="map">
<map>
<entry key="name" value="张三"/>
<entry key="price" value="10000"/>
<entry key="car" value-ref="car1"/>
</map>
</property>
<property name="properties">
<props>
<prop key="name">张三</prop>
<prop key="price">10000</prop>
</props>
</property>
</bean>
名称空间p和c
p和c是嵌入到spring内核中的虚拟的名称空间
<!-- 使用构造器注入属性,依赖的是有参构造 -->
<bean name="car1" class="cn.ade.bean.CarBean">
<constructor-arg index="0" type="java.lang.String" value="红旗"/>
<constructor-arg index="1" type="java.lang.Double" value="1000000"/>
</bean>
<!-- 使用c空间名称来简化构造器的属性注入 -->
<!-- 引入xmlns:c="http://www.springframework.org/schema/c" -->
<bean name="car1" class="cn.ade.bean.CarBean" c:brand="红旗" c:price="1000000"/>
<!-- 使用setter方法注入属性 -->
<bean name="car2" class="cn.ade.bean.CarBean">
<property name="brand" value="红旗"/>
<property name="price" value="2000000"/>
<!-- 使用ref属性来引入另一个bean -->
<property name="user" ref="user"/>
</bean>
<!-- 使用p名称空间来简化setter注入 -->
<!-- 引入xmlns:p="http://www.springframework.org/schema/p" -->
<bean name="car2" class="cn.ade.bean.CarBean" p:brand="红旗" p:price="2000000" p:user-ref="user"/>
SpEl
spel(spring expression language),表达式语言模块,是在spring 3.0以后的版本引入的。它类似于el或ognl表达式
spel表达式:#{表达式}
<!-- 使用setter方法注入属性 -->
<bean name="car2" class="cn.ade.bean.CarBean">
<!-- 使用ref属性来引入另一个bean -->
<!-- <property name="user" ref="user"/> -->
<property name="user" value="#{user}"/>
<!-- <property name="brand" value="红旗"/> -->
<property name="name" value="#{person.name}"/>
<!-- <property name="age" value="2"/> -->
<property name="age" value="#{1+1}"/>
</bean>