03-spring学习-属性配置细节

配置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

---恢复内容结束---

原文地址:https://www.cnblogs.com/alsf/p/7860263.html