版权声明:本文为博主原创文章,未经博主允许不得转载。 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>