Spring中的Bean配置 (8)—— 集合属性

本文详细探讨了Spring中如何配置集合属性,包括list、set、map标签的使用,以及如何通过util schema定义独立的集合Bean。还介绍了Spring 2.5引入的p命名空间,以简化XML配置。通过代码示例展示了各种配置方式。

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

在这里插入图片描述
Spring中的Bean配置 (1)——内容提要
Spring中的Bean配置 (2)—— IOC和DI
Spring中的Bean配置 (3)——在Spring的IOC容器里配置Bean(通过全类名(反射))——基于XML文件的方式
Spring中的Bean配置 (4)——依赖注入方式
Spring中的Bean配置 (5)——字面值
Spring中的Bean配置 (6)——引用其他Bean
Spring中的Bean配置 (7)——注入参数详解:null值和级联属性
Spring中的Bean配置 (8)—— 集合属性
Spring中的Bean配置 (9)—— XML 配置里的 Bean自动装配
Spring中的Bean配置 (10)—— 继承 Bean 配置和依赖 Bean 配置
Spring中的Bean配置 (11)——Bean的作用域
Spring中的Bean配置 (12)——使用外部属性文件
Spring中的Bean配置 (13)—— Spring表达式语言:SpEl
Spring中的Bean配置 (14)——IOC容器中Bean的生命周期
Spring中的Bean配置 (15)——在Spring的IOC容器里配置Bean(通过工厂方法创建Bean)——基于XML文件的方式
Spring中的Bean配置 (16)——在Spring的IOC容器里配置Bean(通过FactoryBean)——基于XML文件的方式

Spring中的Bean配置 (17)——在Spring的IOC容器里配置Bean——基于注解的方式来配置Bean
1: list, set 标签

  • 在 Spring中可以通过一组内置的 xml 标签(例如: list, set 或map) 来配置集合属性.
  • 配置 java.util.List 类型的属性, 需要指定 list 标签, 在标签里包含一些元素. 这些标签可以通过 value指定简单的常量值, 通过 ref 指定对其他 Bean 的引用. 通过bean 指定内置 Bean 定义. 通过 null标签 指定空元素. 甚至可以内嵌其他集合.
  • 数组的定义和 List 一样, 都使用 list
  • 配置 java.util.Set 需要使用 set 标签, 定义元素的方法与 List 一样.

:2: map标签

  • Java.util.Map 通过 map 标签定义, map 标签里可以使用多个 entry 作为子标签. 每个条目包含一个键和一个值.
  • 必须在 key 标签里定义键
  • 因为键和值的类型没有限制, 所以可以自由地为它们指定 value ,ref, bean null 元素.
  • 可以将 Map 的键和值作为 entry 的属性定义: 简单常量使用 key 和 value 来定义; Bean 引用通过 key-ref 和 value-ref 属性定义
  • 使用 prop> 定义 java.util.Properties, 该标签使用多个 prop 作为子标签. 每个 prop 标签必须定义 key 属性.

​ :3:使用 utility scheme 定义集合

  • 使用基本的集合标签定义集合时, 不能将集合作为独立的Bean定义 ,导致其*它Bean 无法引用该集合, 所以无法在不同Bean之间共享集合.

然而可以使用 util schema 里的集合标签定义独立的集合 Bean. 需要注意的是, 必须在 beans 根元素里添加 util schema 定义

​ :4: 使用 p 命名空间

  • 为了简化 XML 文件的配置,越来越多的 XML 文件采用属性而非子元素配置信息。
  • Spring 从 2.5 版本开始引入了一个新的 p 命名空间,可以通过 bean 元素属性的方式配置 Bean 的属性。
  • 使用 p 命名空间后,基于 XML 的配置方式将进一步简化

以下将对上面四个类型标签一一演示,注意配置.xml文件时要引入如下的namespace
在这里插入图片描述

list标签代码示例(set标签不做演示):
Car.java

package com.atguigu.spring.beans;
import com.atguigu.spring.beans.Person;

public class Car {
	
	private String carName;
	private int price;
	private java.util.List<Person> person;

	public void setCarName(String carName) {
		
		this.carName = carName;
		
	}
	
	public void setPrice(int price) {
		
		this.price = price;
		
	}

	public void setPerson(java.util.List<Person> person) {
		
		this.person = person;
		
	}

	@Override
	public String toString() {
		
		return "Car [carName=" + carName + ", price=" + price + ", person=" + person + "]";
		
	}
	
}



NewCar.java

package com.atguigu.spring.beans;

public class NewCar {

	private String carName;
	private int price;
	private java.util.Map<String,Car> person;

	public void setCarName(String carName) {
		
		this.carName = carName;
		
	}
	
	public void setPrice(int price) {
		
		this.price = price;
		
	}

	public void setPerson(java.util.Map<String, Car> person) {
		this.person = person;
	}

	@Override
	public String toString() {
		
		return "NewCar [carName=" + carName + ", price=" + price + ", person=" + person + "]";
		
	}
	
	
}

Person.java

package com.atguigu.spring.beans;

public class Person {
	
	private String userName;
	private String number;
	private String place;
	
	public void setUserName(String userName) {
		
		this.userName = userName;
		
	}

	public void setNumber(String number) {
		
		this.number = number;
		
	}


	public void setPlace(String place) {
		
		this.place = place;
		
	}

	public Person(String userName, String number, String place) {
		
		super();
		this.userName = userName;
		this.number = number;
		this.place = place;
		
	}

	public  Person() {
		
	}

	@Override
	public String toString() {
		
		return "Person [userName=" + userName + ", number=" + number + ", place=" + place + "]";
		
	}
	
}



application.xml

<?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:lang="http://www.springframework.org/schema/lang"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:task="http://www.springframework.org/schema/task"
	xmlns:util="http://www.springframework.org/schema/util"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-4.3.xsd
		http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">

<bean id="person1" class="com.atguigu.spring.beans.Person">
<constructor-arg value="zlj" type="java.lang.String"></constructor-arg>
<constructor-arg value="123456" type="java.lang.String"></constructor-arg>
<constructor-arg value="fj" type="java.lang.String"></constructor-arg>
</bean>

<bean id="person2" class="com.atguigu.spring.beans.Person">
<constructor-arg value="hl" type="java.lang.String"></constructor-arg>
<constructor-arg value="12345" type="java.lang.String"></constructor-arg>
<constructor-arg value="fj" type="java.lang.String"></constructor-arg>
</bean>

<bean id="person3" class="com.atguigu.spring.beans.Person">
<constructor-arg value="hll" type="java.lang.String"></constructor-arg>
<constructor-arg value="1234567" type="java.lang.String"></constructor-arg>
<constructor-arg value="fj" type="java.lang.String"></constructor-arg>
</bean>

<!-- 测试list标签 -->
<bean id="car1" class="com.atguigu.spring.beans.Car">
<property name="carName" value="benci"></property>
<property name="price" value="1000000"></property>
<property name="person" >
    <list>
        <ref bean="person1"/>
        <ref bean="person2"/>
        <ref bean="person3"/>
    </list>
</property>
</bean>

</beans>

如下是主函数运行文件
Main.java

package com.atguigu.spring.beans;

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

public class Main {

	public static void main(String[] args) {

		ApplicationContext applicationContext=new ClassPathXmlApplicationContext("application.xml");
		
		Car car1=(Car)applicationContext.getBean("car1");
		
	 	System.out.println(car1);
		
	}

}

map标签代码演示(小编把这些标签都放在了相同三个类中做演示所以只是application.xml和Main.java(主函数)不同,所以下面只演示了不同标签使用情况下的不同的application.xml和Main.java(主函数))

xml配置文件
application.xml

<?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:lang="http://www.springframework.org/schema/lang"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:task="http://www.springframework.org/schema/task"
	xmlns:util="http://www.springframework.org/schema/util"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-4.3.xsd
		http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">

<bean id="person1" class="com.atguigu.spring.beans.Person">
<constructor-arg value="zlj" type="java.lang.String"></constructor-arg>
<constructor-arg value="123456" type="java.lang.String"></constructor-arg>
<constructor-arg value="fj" type="java.lang.String"></constructor-arg>
</bean>

<bean id="person2" class="com.atguigu.spring.beans.Person">
<constructor-arg value="hl" type="java.lang.String"></constructor-arg>
<constructor-arg value="12345" type="java.lang.String"></constructor-arg>
<constructor-arg value="fj" type="java.lang.String"></constructor-arg>
</bean>

<!-- 测试map标签 -->
<bean id="car2" class="com.atguigu.spring.beans.NewCar">
<property name="carName" value="benci"></property>
<property name="price" value="1000000"></property>
<property name="person">
    <map>
       <entry key="aa" value-ref="person1"></entry>
       <entry key="bb" value-ref="person2"></entry>
    </map>
</property>
</bean>

</beans>

主函数文件
Main.java

package com.atguigu.spring.beans;

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

public class Main {

	public static void main(String[] args) {

		ApplicationContext applicationContext=new ClassPathXmlApplicationContext("application.xml");
		
		Car car2=(Car)applicationContext.getBean("car2");
		
	 	System.out.println(car2);
		
	}

}

utility标签演示(小编把这些标签都放在了相同三个类中做演示所以只是application.xml和Main.java(主函数)不同,所以下面只演示了不同标签使用情况下的不同的application.xml和Main.java(主函数))

xml配置文件

application.xml

<?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:lang="http://www.springframework.org/schema/lang"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:task="http://www.springframework.org/schema/task"
	xmlns:util="http://www.springframework.org/schema/util"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-4.3.xsd
		http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">

<bean id="person1" class="com.atguigu.spring.beans.Person">
<constructor-arg value="zlj" type="java.lang.String"></constructor-arg>
<constructor-arg value="123456" type="java.lang.String"></constructor-arg>
<constructor-arg value="fj" type="java.lang.String"></constructor-arg>
</bean>

<bean id="person2" class="com.atguigu.spring.beans.Person">
<constructor-arg value="hl" type="java.lang.String"></constructor-arg>
<constructor-arg value="12345" type="java.lang.String"></constructor-arg>
<constructor-arg value="fj" type="java.lang.String"></constructor-arg>
</bean>

<bean id="person3" class="com.atguigu.spring.beans.Person">
<constructor-arg value="hll" type="java.lang.String"></constructor-arg>
<constructor-arg value="1234567" type="java.lang.String"></constructor-arg>
<constructor-arg value="fj" type="java.lang.String"></constructor-arg>
</bean>

<!-- 测试配置单例的集合Bean,以供给多个bean进行引用,需要导入util命名空间 -->
<util:list id="person4">
     <ref bean="person1"/>
     <ref bean="person2"/>
     <ref bean="person3"/>
</util:list>

<bean id="car3" class="com.atguigu.spring.beans.Car">
<property name="carName" value="benci"></property>
<property name="price" value="1000000"></property>
<property name="person" ref="person4">
</property>
</bean>

</beans>

主函数代码文件
Main.java

package com.atguigu.spring.beans;

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

public class Main {

	public static void main(String[] args) {

		ApplicationContext applicationContext=new ClassPathXmlApplicationContext("application.xml");
		
		Car car3=(Car)applicationContext.getBean("car3");
		
	 	System.out.println(car3);
		
	}

}

p标签代码演示(小编把这些标签都放在了相同三个类中做演示所以只是application.xml和Main.java(主函数)不同,所以下面只演示了不同标签使用情况下的不同的application.xml和Main.java(主函数))

xml配置文件
application.java

<?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:lang="http://www.springframework.org/schema/lang"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:task="http://www.springframework.org/schema/task"
	xmlns:util="http://www.springframework.org/schema/util"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-4.3.xsd
		http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">

<!-- 测试使用p命名 -->
<bean id="person5" class="com.atguigu.spring.beans.Person"
    p:number="1233" p:userName="zlj"
></bean>

</beans>

主函数文件
Main.java

package com.atguigu.spring.beans;

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

public class Main {

	public static void main(String[] args) {

		ApplicationContext applicationContext=new ClassPathXmlApplicationContext("application.xml");
		
		Person person5=(Person) applicationContext.getBean("person5");
		
	    System.out.println(person5);
		
	}

}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值