1. 程式人生 > >02-spring學習-屬性配置細節

02-spring學習-屬性配置細節

學習 com type tor rri spring 例子 n) 例如

配置bean的一些細節

字面值

技術分享圖片

如果包含特殊符號,直接寫會報錯。可以用這個<![CDATA[]]>包裹起來

比如這裏的配置屬性裏面的value值包含<>等特殊符號,直接寫會報錯。可以用這個<![CDATA[]]>包裹起來。

<bean id="car2" class="com.spring.beans.Car" >
        <constructor-arg value="Audi" index="0" type="java.lang.String"></constructor-arg>
        <constructor-arg index="1" type="java.lang.String">
            <value><![CDATA[<shanghai^>
]]>
</value> </constructor-arg> <constructor-arg type="double"> <value>250</value> </constructor-arg> </bean>

引用其他bean

技術分享圖片

可以使用<ref>元素或者property的ref屬性,建立bean之間的引用關系

比如這裏有個person類,裏面有個屬性是Car類。在配置bean的時候,需要給car屬性賦值,這時候可以使用ref屬性。

person類:

package com.spring.beans;

public class Person {

    private String name;
    private int age;
    
    private Car car;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return
age; } public void setAge(int age) { this.age = age; } public Car getCar() { return car; } public void setCar(Car car) { this.car = car; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", car=" + car + "]"; } }

配置:可以使用property的ref屬性,建立bean之間的引用關系

    <!-- 如果包含特殊符號,直接寫會報錯。可以用這個<![CDATA[]]>包裹起來 -->
    <bean id="car2" class="com.spring.beans.Car" >
        <constructor-arg value="Audi" index="0" type="java.lang.String"></constructor-arg>
        <constructor-arg index="1" type="java.lang.String">
            <value><![CDATA[<shanghai^>]]></value>
        </constructor-arg>
        <constructor-arg  type="double">
            <value>250</value>
        </constructor-arg>
    </bean>
    
    <bean id="person" class="com.spring.beans.Person">
        <property name="name" value="Tom"></property>
        <property name="age" value="24"></property>
        <!-- 可以使用property的ref屬性,建立bean之間的引用關系 -->
        <property name="car" ref="car2"></property>
    </bean>

或者使用<ref>元素配置:

  <bean id="person" class="com.spring.beans.Person">
        <property name="name" value="Tom"></property>
        <property name="age" value="24"></property>
        <!-- 可以使用property的ref屬性,建立bean之間的引用關系 -->
        <!-- <property name="car" ref="car2"></property>  -->
        <property name="car">
            <ref bean="car2"></ref>
        </property> 
    </bean>

使用這個person類。

         Car car=(Car) ctx.getBean("car");
         Car car2=(Car) ctx.getBean("car2");
         System.out.println(car);
         System.out.println(car2);
         
         Person person=(Person) ctx.getBean("person");
         System.out.println(person);

運行結果:

技術分享圖片

也可以在屬性或者構造器中包含Bean的聲明,這樣的bean稱為內部bean。

    <bean id="person" class="com.spring.beans.Person">
        <property name="name" value="Tom"></property>
        <property name="age" value="24"></property>
         <property name="car">
             <bean class="com.spring.beans.Car">
                 <constructor-arg value="Ford"></constructor-arg>
                 <constructor-arg value="changan"></constructor-arg>
                 <constructor-arg value="200" type="double"></constructor-arg>
             </bean>
         </property>
    </bean>

技術分享圖片

比如註入null值:

技術分享圖片

為級聯屬性賦值:

技術分享圖片

集合屬性

使用list節點為list類型的屬性賦值

技術分享圖片

這裏拿<list>來做例子:

例如:

package com.spring.beans.collections;
import java.util.List;
import com.spring.beans.Car;

public class Person {

    private String name;
    private int age;
    
    private List<Car> cars;
 
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public List<Car> getCars() {
        return cars;
    }

    public void setCars(List<Car> cars) {
        this.cars = cars;
    }

    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + ", car=" + cars + "]";
    }
}

配置:

<!-- 測試集合屬性 -->
    <bean id="person3" class="com.spring.beans.collections.Person">
        <property name="name" value="mike"></property>
        <property name="age" value="27"></property>
    <!-- 使用list節點為list類型的屬性賦值 --> <property name="cars"> <list> <ref bean="car"></ref> <ref bean="car2"></ref> </list> </property> </bean>

運行:

技術分享圖片

set集合的使用跟list集合差不多類似;

Map集合的使用如下:

技術分享圖片

新建一個newPerson類:

package com.spring.beans.collections;
import java.util.Map;
import com.spring.beans.Car;

public class NewPerson {

    private String name;
    private int age;  
    private Map<String,Car> cars;
 
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public Map<String,Car> getCars() {
        return cars;
    }

    public void setCars(Map<String,Car> cars) {
        this.cars = cars;
    }

    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + ", car=" + cars + "]";
    }
}

配置:

<!-- 測試Map集合屬性 -->
    <bean id="person3" class="com.spring.beans.collections.NewPerson">
        <property name="name" value="rose"></property>
        <property name="age" value="28"></property>
        <property name="cars">
            <map>
                <entry key="AA" value-ref="car"></entry>
                <entry key="BB" value-ref="car2"></entry>
            </map>
        </property>
    </bean>

配置properties屬性值

使用props 和 prop 為屬性 properties 賦值

package com.spring.beans.collections;
import java.util.Properties;

public class DataSource {

    private Properties properties;

    public Properties getProperties() {
        return properties;
    }
    public void setProperties(Properties properties) {
        this.properties = properties;
    }

    @Override
    public String toString() {
        return "DataSource [properties=" + properties + "]";
    }  
}

配置:

    <!-- 配置properties屬性值 -->
    <bean id="dataSource" class="com.spring.beans.collections.DataSource">
        <!-- 使用props 和 prop 為屬性 properties 賦值 -->
        <property name="properties">
            <props>
                <prop key="user">root</prop>
                <prop key="password">911581</prop>
                <prop key="jdbcurl">jdbc:mysql:///sys</prop>
                <prop key="driverClass">com.mysql.jdbc.Driver</prop>
            </props>
        </property>
    </bean>

運行結果:

技術分享圖片

配置單例的集合bean

配置單例的集合bean,以供多個bean使用,需要導入util命名空間。

為了導入util命名空間,需要到這裏勾選上util。

技術分享圖片

然後配置如下:

以list集合的集合bean為例:

   <!-- 配置單例的集合bean,以供多個bean進行引用,需要導入util命名空間 -->
    <util:list id="cars5">
        <ref bean="car1"></ref>
        <ref bean="car2"></ref>
    </util:list>

對於其他類型的集合,直接把list換成對應的集合類型名就行,然後util裏面的內容按照上面的集合配置即可。

使用直接用ref即可:

    <bean id="person4" class="com.spring.beans.collections.NewPerson">
        <property name="name" value="rose"></property>
        <property name="age" value="28"></property>
        <property name="cars" ref="car5"></property>
    </bean>

通過p命名空間為bean屬性賦值

通過p命名空間為bean的屬性賦值 ,需要先導入p命名空間,相對於傳統的配置方式更簡潔。

首先導入p命名空間

技術分享圖片

配置bean:

<!-- 通過p命名空間為bean的屬性賦值 ,需要先導入p命名空間-->
    <bean id="person5" class="com.spring.beans.collections.Person"
p:age="30" p:name="張三豐" p:cars-ref="cars" ></bean>

註意:

1,為普通屬性賦值的寫法:p:屬性名=“值”;

2,賦值的屬性需要通過引用其他bean的,比如上面的p:cars-ref,這種引用其他bean的,寫法是:賦值的屬性-ref

---恢復內容結束---

02-spring學習-屬性配置細節