Spring学习笔记-类型转换器
2015-08-07 10:31
351 查看
在日常的web开发中,数据类型转换再常见不过了。通过http向服务器发送的数据都是字符串,但是不论是VO、BO还是DO都不可能只有字符串。
Spring是一个强大的集成框架,尤其是加入SpringMVC以后,所有类型转换器对于Spring来说就像“马云也需要吃米饭”一样,必不可少。
Spring提供了两种类型的类型转换器:
一种是
这两种类型转换器的共同点是:都可以进行数据类型的转换(废话O(∩_∩)O),但两者大有不同。
1)
它适用于系统的各个层面,Controller、Service、Dao、Util等等,因为它对你的任性做了很好的支持。
2)
说了这么多废话,这两个东东到底怎么用呢?Come On!
首先,
1)编写一个实现了
2)然后,把他交给Spring统一管理。怎么交?我来教。
你可以把
3)最后,把他加入到springmvc,如果你不打算在web层应用的话,请忽略。
结束,还不是很复杂。
下面该
1)编写一个实现了
2)然后,上面的差不多,就那个意思。
但是要注意,
3)把他扔给springmvc使用
4)还有最后一步,不要忘记,添加类扫描。
Over…..
Spring是一个强大的集成框架,尤其是加入SpringMVC以后,所有类型转换器对于Spring来说就像“马云也需要吃米饭”一样,必不可少。
Spring提供了两种类型的类型转换器:
一种是
Converter<S, T>,另一种是
Formatter<T>。
这两种类型转换器的共同点是:都可以进行数据类型的转换(废话O(∩_∩)O),但两者大有不同。
1)
Converter<S, T>能将任意类型转成任意类型(只要你能做到!),从字面上来看也很容易明白吧,从S(Source)转成T(Target)。这个接口的签名是这样的
package org.springframework.core.convert.converter; public interface Converter<S, T> { T convert(S source); }
它适用于系统的各个层面,Controller、Service、Dao、Util等等,因为它对你的任性做了很好的支持。
2)
Formatter<T>就不一样了,它严格限制了你的自由,只能从String转成T,是的,可以把他理解为
Converter<S,T>的子集,但是,但是才是重点,它被广泛应用在SpringMVC中,因为我们的浏览器太笨,它只会传递字符串,如果你能开发出一个支持Java对象的html-n,那我跪!
说了这么多废话,这两个东东到底怎么用呢?Come On!
首先,
Converter<S, T>闪亮登场。
1)编写一个实现了
Converter<S, T>接口的类,实现接口中的全部方法(记得要对你的任性负责哦),就像下面这样
public class StringToDateConverter implements Converter<String, Date>{ private Logger logger = Logger.getLogger(StringToDateConverter.class); private String datePattern; public StringToDateConverter(String datePattern){ this.datePattern = datePattern; System.out.println("instantiating...converter with pattern : " + datePattern); } @Override public Date convert(String source) { try { SimpleDateFormat sdf = new SimpleDateFormat(datePattern); sdf.setLenient(false); return sdf.parse(source); } catch (ParseException e) { e.printStackTrace(); logger.info("date parse exception."); } return null; } }
2)然后,把他交给Spring统一管理。怎么交?我来教。
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"> <property name="converters"> <list> <bean class="com.springmvc.test.convertor.StringToDateConverter"> <constructor-arg type="java.lang.String" value="MM-dd-yyyy"/> </bean> </list> </property> </bean>
你可以把
ConversionServiceFactoryBean理解成Spring大容器(大锅)里的一个小容器(小碗),大容器(大锅)用来管理系统对象,小碗用来成米饭(类型转换器)。
3)最后,把他加入到springmvc,如果你不打算在web层应用的话,请忽略。
<mvc:annotation-driven conversion-service="conversionService"/>
结束,还不是很复杂。
下面该
Formatter<T>表演了。
1)编写一个实现了
Formatter<T>接口的类。
public class DateFormatter implements Formatter<Date>{ private String datePattern; private SimpleDateFormat dateFormat; public DateFormatter(String datePattern){ this.datePattern = datePattern; dateFormat = new SimpleDateFormat(datePattern); dateFormat.setLenient(false); } @Override public String print(Date object, Locale locale) { return dateFormat.format(object); } @Override public Date parse(String text, Locale locale) throws ParseException { return dateFormat.parse(text); } }
2)然后,上面的差不多,就那个意思。
<bean id="conversionService2" class="org.springframework.formate.support.FormattingConversionServiceFactoryBean"> <property name="formatters"> <bean class="com.springmvc.test.formatter.DateFormatter"> <constructor-arg type="java.lang.String" value="MM-dd-yyyy"/> </bean> </property> </bean>
但是要注意,
FormattingConversionServiceFactoryBean是另一个饭碗了o(╯□╰)o。
3)把他扔给springmvc使用
<mvc:annotation-driven conversion-service="conversionService2"/>
4)还有最后一步,不要忘记,添加类扫描。
<context:component-scan base-package="com.spirng.mvc.formatter"/>
Over…..
相关文章推荐
- java动态代理(JDK和cglib)
- 从两个平方算法到分治算法-java
- Spring @Autowired,@Resource,@Required注解的用法和作用
- 使用Java代码将IP地址转换为int类型的方法
- springmvc对restful风格的实现
- eclipse启动闪退问题解决方法
- 【转】Java I/O流概念分析整理
- Eclipse-property文件中文显示设置
- 用java解决约瑟夫问题
- Eclipse下Android自动化测试开发环境搭建
- 【Java设计模式】· 命令模式(Command Pattern)
- 用myeclipse创建webservice
- java 字节流与字符流的区别
- java web用于保持状态的4种方法
- Java内部类以及匿名内部类学习总结
- Java多线程——<五>后台线程(daemon)
- 数据库表转javaBean
- java中Collections.sort排序详解
- Eclipse安装Freemarker Editor插件
- Java中的值传递和引用传递