下面是详解Spring注入集合类型属性的完整攻略:
什么是注入集合类型属性?
在Spring中,我们可以使用注解或XML来为Bean注入属性值。当属性值是集合类型时,如数组、List、Map、Set等,需要特殊处理。Spring提供了多种方式来实现注入集合类型属性。
数组类型注入
以数组类型为例,下面给出两种注入方式。
方式一:使用@Value注解
在Bean的定义中,使用@Value注解,使用格式为@Value("#{array}"),其中,array为一个String类型的数组。Spring会根据这个数组的值创建一个String类型的数组,并将其注入到指定的Bean属性中。
示例代码如下:
@Component
public class MyArray {
@Value("#{array}")
private String[] myArray;
public void printArray() {
System.out.println(Arrays.toString(myArray));
}
}
<util:list id="array" value-type="java.lang.String">
<value>value1</value>
<value>value2</value>
</util:list>
<bean id="myArray" class="com.example.MyArray"/>
这样,数组{"value1", "value2"}就会被注入到MyArray类中的myArray属性中。
方式二:使用元素
在XML配置文件中使用元素,用
示例代码如下:
@Component
public class MyArray {
private String[] myArray;
public void setMyArray(String[] myArray) {
this.myArray = myArray;
}
public void printArray() {
System.out.println(Arrays.toString(myArray));
}
}
<bean id="myArray" class="com.example.MyArray">
<property name="myArray">
<list>
<value>value1</value>
<value>value2</value>
</list>
</property>
</bean>
这样,数组{"value1", "value2"}就会被注入到MyArray类中的myArray属性中。
List类型注入
对于List类型注入,可以采用类似数组类型注入的方式,也有一些新的注入方式,下面提供三种示例:
方式一:使用元素
在XML配置文件中使用元素,用
示例代码如下:
@Component
public class MyList {
private List<String> myList;
public void setMyList(List<String> myList) {
this.myList = myList;
}
public void printList() {
System.out.println(myList);
}
}
<bean id="myList" class="com.example.MyList">
<property name="myList">
<list>
<value>value1</value>
<value>value2</value>
</list>
</property>
</bean>
这样,列表{"value1", "value2"}就会被注入到MyList类中的myList属性中。
方式二:使用@Value注解
使用@Value注解的方式类似于数组类型的注入。
示例代码如下:
@Component
public class MyList {
@Value("#{list}")
private List<String> myList;
public void printList() {
System.out.println(myList);
}
}
<util:list id="list" value-type="java.lang.String">
<value>value1</value>
<value>value2</value>
</util:list>
<bean id="myList" class="com.example.MyList"/>
这样,列表{"value1", "value2"}就会被注入到MyList类中的myList属性中。
方式三:使用@Resource注解
使用@Resource注解可以注入一个名称为“list”的Bean作为List类型属性值。
示例代码如下:
@Component
public class MyList {
@Resource(name = "list")
private List<String> myList;
public void printList() {
System.out.println(myList);
}
}
<util:list id="list" value-type="java.lang.String">
<value>value1</value>
<value>value2</value>
</util:list>
<bean id="myList" class="com.example.MyList"/>
这样,列表{"value1", "value2"}就会被注入到MyList类中的myList属性中。
Map类型注入
对于Map类型注入,同样有多种方式,下面提供两个示例:
方式一:使用
在XML配置文件中使用