Spring全回顾之bean的集合属性

首先新建一个类,Car类的创建参照Spring全回顾之构造方法注入值

package com.kk.spring.beans.collections;

import java.util.List;

import com.kk.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 + ", cars=" + cars + "]";
    }


}

可以看到Person 类有一个list属性,list的泛型是一个Car对象。如何给list里的Car对象注入值,看下面Spring配置文件内容

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">

    <bean id="car" class="com.kk.spring.beans.Car">
        <constructor-arg value="Audi" index="0"></constructor-arg>
        <constructor-arg value="ShangHai" index="1"></constructor-arg>
        <constructor-arg value="300000" type="double"></constructor-arg>
    </bean>

    <bean id="car2" class="com.kk.spring.beans.Car">
        <constructor-arg value="BMW" type="java.lang.String"></constructor-arg>
        <constructor-arg value="ShangHai" type="java.lang.String"></constructor-arg>
        <constructor-arg value="240" type="int"></constructor-arg>
        <!-- 另一种方式使用value子节点配置,属性值也可以使用value直接进行配置 -->
        <constructor-arg type="int">
            <value>260</value>
        </constructor-arg>
    </bean>

    <!-- 测试如何配置集合属性 -->
    <bean id="person3" class="com.kk.spring.beans.collections.Person">
        <property name="name" value="Mike"></property>
        <property name="age" value="28"></property>
        <property name="cars">
            <!-- 使用list节点,为list类型的属性赋值 -->
            <list>
                <!-- 方式一:应用外部Bean -->
                <ref bean="car"/>
                <ref bean="car2"/>
                <!-- 方式二: 内部Bean -->
                <bean class="com.kk.spring.beans.Car">
                <constructor-arg value="Ford"></constructor-arg>
                <constructor-arg value="ChangAn"></constructor-arg>
                <constructor-arg value="200000" type=""></constructor-arg>
                </bean>
            </list>
        </property>
    </bean>
</beans>

在看Map如何配置,在新建一个类

package com.kk.spring.beans.collections;

import java.util.Map;

import com.kk.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 "NewPerson [name=" + name + ", age=" + age + ", cars=" + cars + "]";
    }

}

在看Spring配置文件

    <!-- 配置Map属性值 -->
    <bean id="newPerson" class="com.kk.spring.beans.collections.NewPerson">
        <property name="name" value="Rose"></property>
        <property name="age" value="30"></property>
        <property name="cars">
            <!-- 使用Map节点及Map的entry 子节点配置Map,类型的成员变量 -->
            <map>
                <entry key="AA" value-ref="car"></entry>
                <entry key="BB" value-ref="car2"></entry>
            </map>
        </property>
    </bean>

一个测试类看看效果

package com.kk.spring.beans.collections;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {

    public static void main(String[] args) {

    ApplicationContext ctx = new ClassPathXmlApplicationContext("applicaContext.xml");
    Person person = (Person) ctx.getBean("person3");
    System.out.println("person3:  "+person);

    NewPerson nwePerson = (NewPerson) ctx.getBean("newPerson");
    System.out.println("nwePerson: "+nwePerson);

结果:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/fx9590/article/details/80394340