spring系列:四、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>
发布了48 篇原创文章 · 获赞 1 · 访问量 1052

猜你喜欢

转载自blog.csdn.net/laonxs/article/details/104998167