mvc里很有用,接收页面参数
前面有个属性编辑器
类型转换器牛逼一些
为啥呢
属性编辑器只能处理String类型的转换
@Override
public void setAsText(String text) throws IllegalArgumentException {
而类型转换器可以为所欲为
先自定义一个转换器
一般都要先继承一个接口
继承哪个呢
Spring提供了三个
Converter
T convert(S source);
完成S到T的转换
一对一
GenericConverter
Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType);
N对N
这个可以为所欲为
ConverterFactory
<T extends R> Converter<S, T> getConverter(Class<T> targetType);
工厂模式
生产转换器Converter
一对N
咋们整个简单的
Converter
StringToCollection
public class StringToCollectionConverter implements Converter<String, List<String>> {
@Override
public List<String> convert(String source) {
return Arrays.asList(source.split("n"));
}
}
User
private String name;
private List<String> girlfriends;
配置文件
<bean id="user" class="com.cn.mytest.selfConverter.User">
<property name="name" value="ccc" />
<property name="girlfriends" value="aasdnasndnasdnasndansdnafnsdanfndsfn" />
</bean>
注意此时还没有应用砸门自己的类型转换器
测试一下
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("componentScan.xml");
Object bean = applicationContext.getBean("user");
System.out.println(bean);
User{name='ccc', girlfriends=[aasdnasndnasdnasndansdnafnsdanfndsfn]}
告诉Spring有自定义转换器
丢尽容器吗直接?
不是
配置文件
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean" >
<property name="converters">
<set>
<bean class="com.cn.mytest.selfConverter.StringToCollectionConverter"/>
</set>
</property>
</bean>
或注解
啥时候直接丢进容器,啥时候要包装一下
搞不懂
测试测试
User{name='ccc', girlfriends=[aasd, as, d, asd, as, da, sd, af, sda, f, dsf]}
源码分析
后面再说吧,还没学到用转换器那里