Spring学习(四)-Bean集合属性

本文介绍Spring框架中如何使用XML配置文件实现对Bean的集合属性(List、Map等)的注入,包括不同注入方式的示例代码及测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

**Bean属性:集合属性(LIst Map…)
单例集合bean(util命名空间)
Properties
p命名空间**

1.person.java(List与Map集合)

package com.thirdCollection.bean;

import java.util.List;

public class Person {

    private String sex;
    private String name;
    private String age;
    private List <Car> cars;
    private Map<String,Car> mapcars;
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }

    public List<Car> getCars() {
        return cars;
    }
    public void setCars(List<Car> cars) {
        this.cars = cars;
    }
    public Map<String, Car> getMapcars() {
        return mapcars;
    }
    public void setMapcars(Map<String, Car> mapcars) {
        this.mapcars = mapcars;
    }
    public Person() {

    }
    public Person(String sex, String name, String age, List<Car> cars) {
        super();
        this.sex = sex;
        this.name = name;
        this.age = age;
        this.cars = cars;
    }
    @Override
    public String toString() {
        return "Person [sex=" + sex + ", name=" + name + ", age=" + age + ", cars=" + cars + "]";
    }
    public String toString2() {
        return "Person [sex=" + sex + ", name=" + name + ", age=" + age + ", mapcars=" + mapcars + "]";
    }
    public void output()
    {
        System.out.println("IOC");
    }


}

2.Car.java

package com.thirdCollection.bean;

public class Car {

    private String brand;
    private String corp;
    private double price;
    private int maxSpeed;
    public String getBrand() {
        return brand;
    }
    public void setBrand(String brand) {
        this.brand = brand;
    }
    public String getCorp() {
        return corp;
    }
    public void setCorp(String corp) {
        this.corp = corp;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
    public int getMaxSpeed() {
        return maxSpeed;
    }
    public void setMaxSpeed(int maxSpeed) {
        this.maxSpeed = maxSpeed;
    }
    public Car() {

    }
    public Car(String brand, String corp, double price) {
        this.brand = brand;
        this.corp = corp;
        this.price = price;
    }
    @Override
    public String toString() {
        return "Car [brand=" + brand + ", corp=" + corp + ", price=" + price + ", maxSpeed=" + maxSpeed + "]";
    }



}

3.bean.xml

使用list集合遍历多个Car属性

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

    <bean id="helloWorld" class="com.firstSpring.HelloWorldImpl"></bean>

    <bean name="student" class="com.shuxing.bean.Student"></bean>
    <bean name="studentDao" class="com.shuxing.bean.StudentDaoImpl"></bean>
    <bean name="studentService" class="com.shuxing.bean.StudentServiceImpl">
        <!-- 1、Setter属性注入 -->  
        <!-- <property name="属性名称" ref="bean引用名称"></property> --> 
        <!-- 
            构造器注入可以指定参数的位置和参数的类型type属性 
            property中的ref属性建立bean之间的引用关系
        -->
        <!--  
        <property name="studentDao" ref="studentDao"></property>
        <property name="student" ref="student"></property>
        -->


        <!-- 2、构造方法注入 -->  
        <!-- <constructor-arg ref="bean引用名称" index="属性索引"></constructor-arg> -->  
        <constructor-arg ref="studentDao" index="0"></constructor-arg>  
        <constructor-arg ref="student" index="1"></constructor-arg>
    </bean>

    <bean id="person" class="com.second.bean.Person">   
    </bean>

    <bean id="car" class="com.second.bean.Car">
        <constructor-arg  value="Ford"></constructor-arg>
        <constructor-arg  value="changagn"></constructor-arg>
        <constructor-arg  value="20000"></constructor-arg>
    </bean>

    <bean id="car1" class="com.thirdCollection.bean.Car">
        <constructor-arg  value="Benchi"></constructor-arg>
        <constructor-arg  value="chang"></constructor-arg>
        <constructor-arg  value="40000"></constructor-arg>
    </bean>
    <bean id="car2" class="com.thirdCollection.bean.Car">
        <constructor-arg  value="Baoma"></constructor-arg>
        <constructor-arg  value="angagn"></constructor-arg>
        <constructor-arg  value="30000"></constructor-arg>
    </bean>

    <bean id="car3" class="com.thirdCollection.bean.Car">
        <constructor-arg  value="Benchi"></constructor-arg>
        <constructor-arg  value="chang"></constructor-arg>
        <constructor-arg  value="40000"></constructor-arg>
    </bean>

    <bean id="person2" class="com.second.bean.Person">
        <!-- 
            属性如有特殊字符可以使用<![CDATA[]]>包裹起来
            属性值也可以使用value直接进行配置
        -->
        <constructor-arg type="java.lang.String">
            <value><![CDATA[女一号]]></value>
        </constructor-arg>
        <constructor-arg value="lisi" type="java.lang.String"></constructor-arg>
        <constructor-arg type="java.lang.String">
            <value>21</value>
        </constructor-arg>
        <constructor-arg ref="car"></constructor-arg>
            <!-- 为级联属性赋值 属性需要先初始化再为级联属性赋值 -->
            <property name="car.maxSpeed" value="180"></property>
    </bean>


    <!-- 测试集合属性 -->
    <bean id="person3" class="com.thirdCollection.bean.Person">
        <property name="sex" value="男"></property>
        <property name="name" value="Mike"></property>
        <property name="age" value="21"></property>
        <property name="cars">
            <list>
                <ref bean="car1"/>
                <ref bean="car2"/>
                <ref bean="car3"/>
            </list>
        </property>    
    </bean>

   <!-- 测试map集合属性 -->
    <bean id="person4" class="com.thirdCollection.bean.Person">
        <property name="sex" value="男"></property>
        <property name="name" value="Jake"></property>
        <property name="age" value="23"></property>
        <property name="mapcars">
            <!-- 使用map节点以及map的entry子节点配置Map成员变量 -->
            <map>
                <entry key="AA" value-ref="car1"></entry>
                <entry key="BB" value-ref="car2"></entry>
            </map>
        </property>    
    </bean>

    <!-- 配置Properties属性值 -->
    <bean id="dataSource" class="com.thirdCollection.bean.DataSource">
        <property name="properties">
            <!-- 使用props和prop子节点为Properties属性赋值 -->
            <props>
                <prop key="user">root</prop>
                <prop key="password">1234</prop>
                <prop key="jdbcUrl">jdbc:mysql://test</prop>
                <prop key="driverClass">com.mysql.jdbc.Driver</prop>
            </props>
        </property>
    </bean>

    <!-- 配置单例的集合bean,以供多个bean进行引用,需要导入util命名空间 -->
    <util:list id="cars">
        <ref bean="car1"/>
        <ref bean="car2"/>
    </util:list>

    <bean id="person5" class="com.thirdCollection.bean.Person">
        <property name="sex" value="女"></property>
        <property name="name" value="Mike"></property>
        <property name="age" value="20"></property>
        <property name="cars" ref="cars"></property>
    </bean>

    <!--通过p命名空间为bean的属性赋值,需要导入p命名空间,相对于传统的配置方式更加简洁  -->
    <bean id="person6" class="com.thirdCollection.bean.Person" p:sex="男"
        p:name="Queen" p:age="21" p:cars-ref="cars">
    </bean>
</beans>

4.TestCollection.java测试类

package com.thirdCollection.bean;

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


public class TestCollection {

    public static void main(String[] args) {

        ApplicationContext ctx=new 
                ClassPathXmlApplicationContext("springXML/beans.xml");

        /*
        Person person3=(Person)ctx.getBean("person3");
        System.out.println(person3.toString());
        */
        Person person4=(Person)ctx.getBean("person4");
        System.out.println(person4.toString2());

        DataSource dataSource=ctx.getBean(DataSource.class);
        System.out.println(dataSource);

        Person person5=(Person)ctx.getBean("person5");
        System.out.println(person5);

        Person person6=(Person)ctx.getBean("person6");
        System.out.println(person6);
    }

}

5.DataSource.java

package com.thirdCollection.bean;

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 + "]";
    }



}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值