0

大家好,任何人都可以帮助我。我目前有一个可能必须在多线程应用程序中使用的服务类,任何人都可以帮助我使用 Spring IOC 使我使用的格式类成为线程安全的。

这是一个代码片段

@Configuration
@EnableTransactionManagement(mode=AdviceMode.ASPECTJ)
public class MyConfig
{
    ...
    @Bean
    public DateFormat dateFormatMMddyyyy()
    {
        return new SimpleDateFormat("MM/dd/yyyy");
    }
   ...
}

@Component("myServiceComponent")
public class MyServiceComponent5
{
   @Autowired 
   private DateFormat dateFormatMMddyyyy; //HEY Fix Me!!

   ...

   public void sampleProcess(Date date)
   {

   String formatedDate = dateFormatMMddyyyy.format(date);

   // do usefull stuffn here

   }
}

@Service("MyService")
{
   @Autowired
   private MyServiceComponent5 myServiceComponent5;

   public doMultiThreadProcess(Date date)
   {
      // not sure how to do this yet and probably gona ask on a different thread. =\
      // Currently more concern on how to set up MyServiceComponent5
      ...
      myServiceComponent5.sampleProcess(date);
      ...
   }

}

如果我做错了什么,任何人都可以发表评论。最近我刚刚读到 Number/DateFormat 类不是线程安全的,所以我必须将它们放在方法中或使用 threadlocal。谁能帮我修改我的课程,以便我可以使用第二个选项(弹簧方式)。

顺便说一句,如果您需要任何澄清或其他信息,请告诉我。对设计的评论也将不胜感激。

请注意,代码只是一个示例,但它描述了我目前正在做的事情。此外,如果这对当前问题有任何影响,这将用于桌面应用程序。

使用的框架将是 Spring 3.1、Java 7 和 hibernate。

最后,提前感谢您,代码片段将不胜感激。

4

2 回答 2

2

就您的日期格式化需求而言,JODA具有线程安全的日期/时间格式化程序。Spring MVC 默认也支持该库:

通过这一行配置,将安装数字和日期类型的默认格式化程序,包括对 @NumberFormat 和 @DateTimeFormat 注释的支持。如果类路径中存在 Joda Time,则还安装了对 Joda Time 格式化库的完全支持。

来源

于 2012-04-18T05:42:57.183 回答
0
I was also able to do this using this snippet. It works hopefully this has no side effects.

@Bean()
public ThreadLocal<DateFormat> dateFormatMMddyyyy()
{
    ThreadLocal<DateFormat> threadLocal = new ThreadLocal<DateFormat>()
    {
        @Override
        protected DateFormat initialValue()
        {
            return new SimpleDateFormat("MM/dd/yyyy");
        }
    };

    return threadLocal;
}
于 2013-05-17T10:51:25.580 回答