spring学习之集合属性注入

spring中对象之间的相互依赖关系是通过applicationContext.xml来管理的,因此集合属性注入的重点也放在applicationContext.xml的配置之中。

下面是一个完整的各种集合属性注入的例子

目录结构:

实体类

public class Students {

	private String sid;
	private String sname;
	private int age;

	public Students() {
		super();
	}
	public Students(String sid, String sname, int age) {
		super();
		this.sid = sid;
		this.sname = sname;
		this.age = age;
	}
	public String getSid() {
		return sid;
	}
	public void setSid(String sid) {
		this.sid = sid;
	}
	public String getSname() {
		return sname;
	}
	public void setSname(String sname) {
		this.sname = sname;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

spring提倡面向接口的编程,因此抽象出对students类的常用操作的方法。

public interface StudentsDAO {

	//保存学生
	public boolean saveStudents(Students s);
}
public class StudentsDAOImpl implements StudentsDAO {

	@Override
	public boolean saveStudents(Students s) {
		if(s!=null)
		{
			return true;
		}
		else
		{
			return false;
		}
	}

}

service层

public class StudentsService {

	//name对应applicationContext中bean的name
	//@Resource(name="studentsDAO")
	//按照类型来匹配,因为它们的类型不同,
	@Autowired
	@Qualifier("studentsDAO")
	private StudentsDAO sDAO;
	//@Resource(name="students")
	@Autowired
	@Qualifier("students")
	private Students s;
	private List<String> citys;
	private List<Students> stus;
	private Set<String> countrys;
	private Map<Integer,String> users;

	public List<Students> getStus() {
		return stus;
	}

	public void setStus(List<Students> stus) {
		this.stus = stus;
	}

	public Set<String> getCountrys() {
		return countrys;
	}

	public void setCountrys(Set<String> countrys) {
		this.countrys = countrys;
	}

	public List<String> getCitys() {
		return citys;
	}

	public void setCitys(List<String> citys) {
		this.citys = citys;
	}

	public Map<Integer, String> getUsers() {
		return users;
	}

	public void setUsers(Map<Integer, String> users) {
		this.users = users;
	}

	public StudentsDAO getsDAO() {
		return sDAO;
	}

	public void setsDAO(StudentsDAO sDAO) {
		this.sDAO = sDAO;
	}

	public Students getS() {
		return s;
	}

	public void setS(Students s) {
		this.s = s;
	}

	//保存学生
	public boolean saveStudents(){
		if(sDAO.saveStudents(s))
		{
			return true;
		}
		else
		{
			return false;
		}
	}
}

applicationContext.xml,配置文件

其中有list<String>、set<String>、Map和list<Students>(它是一个引用类型)

<?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:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context-3.0.xsd
	">
	<!-- 加入对注解的支持 -->
	<context:annotation-config/>
	<bean name="students" class="com.qzp.model.Students">
		<constructor-arg index="0" type="java.lang.String" value="001"/>
        <constructor-arg index="1" value="qzp"/>
		<constructor-arg index="2" value="25"/>
	</bean>
	<bean name="studentsDAO" class="com.qzp.dao.impl.StudentsDAOImpl"></bean>
	<bean name="studentsService" class="com.qzp.service.StudentsService">
		<property name="s" ref="students"></property>
        <property name="sDAO" ref="studentsDAO"></property>
        <property name="citys">
          <list>
        	<value>北京</value>
        	<value>南京</value>
        	<value>上海</value>
          </list>
        </property>
        <property name="stus">
          <list>
        	<bean name="stu1" class="com.qzp.model.Students">
        	 <constructor-arg index="0" type="java.lang.String" value="001"/>
        	 <constructor-arg index="1" value="qzp"/>
			 <constructor-arg index="2" value="25"/>
        	</bean>
        	<bean name="stu2" class="com.qzp.model.Students">
        	 <constructor-arg index="0" type="java.lang.String" value="002"/>
        	 <constructor-arg index="1" value="qap"/>
			 <constructor-arg index="2" value="12"/>
        	</bean>
          </list>
        </property>
        <property name="countrys">
          <set>
        	<value>中国</value>
        	<value>英国</value>
        	<value>美国</value>
          </set>
        </property>
        <property name="users">
          <map key-type="java.lang.Integer" value-type="java.lang.String">
           <entry key="0" value="张三"></entry>
           <entry key="1" value="李四"></entry>
           <entry key="2" value="王五"></entry>
          </map>
        </property>
   </bean>
</beans>

最后附上测试代码

public  class TestStudentsService extends TestCase{

	public void testSaveStudents(){
		ApplicationContext cxt=new ClassPathXmlApplicationContext("applicationContext.xml");
		StudentsService sService=(StudentsService)cxt.getBean("studentsService");
		List<String> citys=sService.getCitys();
		Set<String> countrys=sService.getCountrys();
		Map<Integer,String> users=sService.getUsers();
		List<Students> stus=sService.getStus();
		for(String city:citys){
			System.out.println(city);
		}
		System.out.println("---------");
		for(String country:countrys){
			System.out.println(country);
		}
		System.out.println("---------");
		//打印map类型
		for(int key:users.keySet()){
			System.out.println("key="+key+"value="+users.get(key));
		}
		System.out.println("---------");
		for(Students stu:stus){
			System.out.println("学号"+stu.getSid()+"姓名"+stu.getSname());
		}
		//使用断言,如果二者相等,通过
		Assert.assertEquals(true, sService.saveStudents());

	}
}

测试结果如下:

北京

南京

上海

---------

中国

英国

美国

---------

key=0value=张三

key=1value=李四

key=2value=王五

---------

学号001姓名qzp

学号002姓名qap

时间: 2024-12-27 18:02:42

spring学习之集合属性注入的相关文章

Spring简单属性注入和集合属性注入

属性注入是Spring中较为重要的一项功能.下面就讲讲简单属性注入和集合属性注入的具体操作. 步骤: ①首先不管是简单属性注入还是集合属性注入,都要使用到property标签 ②然后如果是简单属性注入的话直接给property标签的value值赋值即可,其中的value的类型我们可以不指定,框架会自        动识别,当然我们也可以指定,指定的形式如:java.lang.String (要写完成的类型).其也有两种方式: 第一种方式:<property name="类中属性名"

spring IOC快速入门,属性注入,注解开发

我们使用spring框架也会使用到配置文件,我们需要在src下创建一个关于spring的配置文件,一般情况名称叫applicationContext.xml 基本约束: <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> IOC快速入门 inversion of Controller

六 Spring的配置:属性注入

Spring的属性注入: 构造方法的属性注入 set方法的属性注入 构造方法的属性注入: set方法的属性注入: set方法注入对象: 1 package com.itheima.spring.demo4; 2 3 public class Employee { 4 private String name; 5 private Car2 car2; 6 7 public void setName(String name) { 8 this.name = name; 9 } 10 public v

Spring boot将配置属性注入到bean类中

一.@ConfigurationProperties注解的使用 看配置文件,我的是yaml格式的配置: // file application.yml my: servers: - dev.bar.com - foo.bar.com - jiaobuchong.com 1 2 3 4 5 6 下面我要将上面的配置属性注入到一个Java Bean类中,看码: import org.springframework.boot.context.properties.ConfigurationProper

Spring----内bean和集合属性注入和properties属性注入

内部bean bean里的属性可以赋空值 先初始化三个Car的bean <!-- 定义若干辆车 --> <bean id="car1" class="com.entity.Car"> <property name="brand" value="宝马"/> <property name="color" value="白色"/> </be

Spring学习一(依赖注入/Bean/注解等)

1.Spring依赖注入的方式. 2.依赖注入的类型 3.Bean的作用域 4.自动注入 5.使用注解的方式 6.在spring配置文件中引入属性文件 1.Spring依赖注入的方式 平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理. spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中.依赖注入的另一种说法是“

spring各种类型的属性注入

spring test + Junit方式: pox.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"          xsi:schemaLoc

spring基于注解的属性注入

1.@Autowired 通过类型进行匹配(主流的方式),当容器中出现两个同类型的bean时会报NoUniqueBeanDefinitionException的异常.这时有两种方法, 第一种 如果有两个bean放弃注入,@Autowired 有一个required属性.fase 表示抛出异常放弃注入.默认为true 第二种 通过@Qualifier指定注入bean的名称 如下: @Autowired @Qualifier("userDaoImpl") private UserDao d

spring的两种属性注入方式setter注入和构造器注入或者自动注入

1.这里的属性自动注入,与注解配置bean是两回事.这里的自动注入,指的是bean属性的自动注入. bean属性自动注入,包括byNAme和ByType两码事. 2.所有的applicationContext都实现了resourceLoader接口,通过resourceLoader可以获得resource实例,进而可以访问资源文件. 所以要在类中获得resource实例,必须实现applicationContextAware接口.