2012-04-18 18 views
0

誰も助けてくれます。私は現在、スレッド・セーフなアプリケーションで使用しなければならないサービス・クラスを持っています。ここでSpring 3.X Java 7スレッドセーフ日付/数値形式の注射

は、コードスニペット

@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クラスはスレッドセーフではないので、メソッド内に配置するか、またはスレッドローカルを使用する必要があります。誰でも私のクラスを変更するのを助けて、2番目のオプション(春の方法)を使うことができますか?

ところで、説明や追加情報が必要な場合は、私に教えてください。また、デザインに対するコメントも高く評価されます。

メモこのコードは単なるサンプルに過ぎませんが、私が現在行っていることを説明しています。また、現在の問題に何らかの影響がある場合は、デスクトップアプリケーションに使用されます。

使用されるフレームワークは、Spring 3.1、Java 7、および休止状態になります。

最後に、事前にお読みいただきありがとうございます。

+0

こんにちは!誰にも他のアイデアはありますか? –

答えて

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; 
} 
2

日付の書式設定に関する限り、JODAはスレッドセーフであるdate/time formattersです。ライブラリはまた、Spring MVCのではデフォルトでサポートされています。configuationのこの1行で

、数字と 日付型のデフォルトフォーマッタは@NumberFormat と@DateTimeFormat注釈のサポートを含め、インストールされます。 Joda Timeが クラスパス上に存在する場合は、 書式設定ライブラリも完全にサポートされています。

Source

+0

こんにちはご回答ありがとうございます。私はあなたが与えたソースをチェックします。私はまだこれが役に立つかもしれないので、スレッドローカル変数を@autowireする方法を探しています。また、あなたが与えたソースの初期スキャンでは、インスタンス変数の値に同じスレッドセーフフォーマッタを得る方法がありますので、通常のjavaフォーマッタのように自由に使用できます。 –