关于集合注入
来源: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
祝学习愉快~