Spring笔记(5)——Spring复杂类型的注入

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Richard1997/article/details/81333438

  上一篇笔记中我们记录了注入的四种方式,这一片我们接着上一篇的项目,来谈谈复杂类型的注入。

  何为复杂类型?数组、集合、列表等,它们不同于简单的值类型,绝大多数情况下,它们不能直接name value或者name ref地处理,那么现在就举个例子来学习一下处理它们的方法。

在bean包中新建一个集合类CollectionBean.java:

package com.rr.bean;

import java.util.*;

public class CollectionBean {
	private Object[] arr; //数组类型注入
	private List list; //List/Set类型注入
	private Map map; //map类型注入
	private Properties prop; //properties类型
	public Object[] getArr() {
		return arr;
	}
	public void setArr(Object[] arr) {
		this.arr = arr;
	}
	public List getList() {
		return list;
	}
	public void setList(List list) {
		this.list = list;
	}
	public Map getMap() {
		return map;
	}
	public void setMap(Map map) {
		this.map = map;
	}
	public Properties getProp() {
		return prop;
	}
	public void setProp(Properties prop) {
		this.prop = prop;
	}
	@Override
	public String toString() {
	    return "CollectionBean [arr=" + Arrays.toString(arr) + ", list=" + list + ", map=" + map + ", prop=" + prop
				+ "]";
	}
	
	
}

先谈谈只处理一个元素数组的情况下,如何注入!

配置文件加入bean标签:

<bean name="cb" class="com.rr.bean.CollectionBean">
 		<!-- 如果数组只注入一个值(对象),直接使用value|ref -->
 		<property name="arr" value="collection"></property>
 	</bean>

第一个测试函数:

	@Test
	public void fun5() { 
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		CollectionBean cb = (CollectionBean)ac.getBean("cb");
		System.out.println(cb);
	}

测试结果:

   可见,只有一个元素的数组,我们要注入这样的数组类型属性,用平常的name+value与ref就行。如果是多个元素,就要进一步添加一个array标签(arr的第三个元素为之前注入的User对象):

 	<bean name="cb" class="com.rr.bean.CollectionBean">
 		<!-- 如果数组只注入一个值(对象),直接使用value|ref 
 		<property name="arr" value="collection"></property>
 		-->
 		<property name="arr">
 			<array>
 				<value>tom</value>
 				<value>777</value>
 				<ref bean="user4"/>
 			</array>
 		</property>
 	</bean>

还是使用刚才的测试方法,结果如下:

扫描二维码关注公众号,回复: 5224462 查看本文章

继续注入List域,同样的,如果只有一个元素,也可以直接name+value|ref:

<property name="list" value="2019"></property>

如果是多个值:

	<property name="list">
		<list>
			<value>Bob</value>
			<value>Alice</value>
			<ref bean="user4"/>
		</list>
	</property>

注入Map域,语法如下(第一二个映射的键和第一个的值为字符串类型,其余的键值为引用类型):

<property name="map">
		<map>
			<entry key="url" value="jdbc:mysql://localhost"></entry>
			<entry key="user" value-ref="user4"></entry>
			<entry key-ref="user3" value-ref="user2"></entry>
		</map>
	</property>

注入Properties域:

        <property name="prop">
			<props>
				<prop key="driverClass">com.jdbc.mysql.Driver</prop>
				<prop key="username">root</prop>
				<prop key="password">1223</prop>
			</props>
		</property>

参考源码

猜你喜欢

转载自blog.csdn.net/Richard1997/article/details/81333438