Springs CustomDateEditor引诱犯错误?

时间:2013-09-04 15:32:30

标签: java spring spring-mvc

让我先从几个事实开始:

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 ...),陷入陷阱。

什么是线程安全解决方案?

1 个答案:

答案 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>
  ...