让我先从几个事实开始:
SimpleDateFormat 非线程安全,如此处所证明:Andy Grove's Blog: SimpleDateFormat and Thread Safety
如果要将作为请求参数的字符串转换为其他对象(如java.util.Date),可以使用Java Beans' property editor support。
对于java.util.Date,Spring提供了一个为您进行转换的类:CustomDateEditor。
该类的构造函数需要DateFormat作为第一个参数。因此,即使每个请求都注册了自定义属性编辑器:按照建议here注入SimpleDateFormat(DateFormat的唯一标准实现)(请向下滚动或使用浏览器搜索SimpleD ...),陷入陷阱。
什么是线程安全解决方案?
答案 0 :(得分:1)
使用scope="request"
配置SimpleFormatDate,将为每个请求实例化SimpleDateFormat
的新实例。
<bean id="simpleDateFormat" class="java.text.SimpleDateFormat" scope="request">
<constructor-arg value="dd-MM-yyyy"/>
</bean>
注意:您可能需要使用代理
进行配置<beans
xmlns:aop="http://www.springframework.org/schema/aop"
...
xsi:schemaLocation="...
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<bean id="simpleDateFormat" class="java.text.SimpleDateFormat" scope="request">
<constructor-arg value="dd-MM-yyyy"/>
<aop:scoped-proxy />
</bean>
...