关于集合注入
来源:3-17 注入集合对象-1
信纸呀
2022-11-11 16:08:16
1回答
同学你好,
1、是的,默认情况下,List是会转化为ArrayList的,这是Spring的默认行为
2、按照同学所说的,如果想转换为其他类型,例如:LinkedList的话,那就必须要增加转换器,即如下代码示例:
import org.springframework.core.convert.converter.Converter;
import java.util.ArrayList;
import java.util.LinkedList;
public class LinkedListConvereter implements Converter<ArrayList, LinkedList> {
@Override
public LinkedList convert(ArrayList source) {
LinkedList llist = new LinkedList();
for(Object obj : source){
llist.add(obj);
}
return llist;
}
}注意:这里转换器如果要生效的话,必须要在application-context.xml配置文件中增加conversionService,也就是去注册这个转换器
application-context.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 配置转换器 --> <!--注册类型转换器UserConverter --> <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"> <property name="converters"> <list> <bean class="org.example.LinkedListConvereter" /> </list> </property> </bean> <bean id="sample" class="org.example.ListSample"> <property name="list" > <list> <!--<bean class="org.example.LinkedListConvereter" />--> <value>A</value> <value>B</value> <value>C</value> </list> </property> </bean> </beans>
其次就是在应用的过程中,在进行注入的时候,例如:这里自定义的接收类ListSample,
public class ListSample {
private LinkedList list;
public LinkedList getList() {
return list;
}
public void setList(LinkedList list) {
this.list = list;
}
}它的属性类型必须是LinkedList能够对应上才可以,绝对不能写这个List的接口,这样的话,就会出现不知道走哪一个转换逻辑
综上所述:默认Spring不提供List与LinkedList的转换,若要实现转换则必须要有转换器,其次要在xml文件中进行配置,最后属性类型必须是LinkedList,其他的转换也是遵循这样的道理哟~

测试类
public class Main {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:application-context.xml");
ListSample sample = ctx.getBean("sample", ListSample.class);
System.out.println(sample.getList().getClass());
System.out.println(sample.getList());
}
}3、是的,set和map也是默认转换成LinkedHashSet和LinkedHashMap
祝学习愉快~