なぜstaticフィールドでのjavax.mail店舗システムのプロパティのクラスはありますか?

トルステンSchoening:

私はに走ったをしたファイル名を扱う問題ではjavax.mail、これらの側面の一部は、セッションプロパティおよびシステムプロパティによっていくつかによって設定する必要があります。多くのクラスはjavax.mail、彼らが次の例のためのように、静的フィールドでの作業プロパティを格納するように見えますMimeBodyPart

private static final boolean encodeFileName =
PropUtil.getBooleanSystemProperty("mail.mime.encodefilename", false);

私の理解から、このシステムプロパティのバインド具体的な値は、いくつかの具体的なクラスローダでクラスの生活に。最初にそのクラスをロードします誰でも、値に影響を与えることができることだけです。それは私に起こったまさにでした。

私は影響力のファイル名の取り扱いにはいくつかの特定のシステムプロパティを設定するために必要なことを知っていたと私は文書化の目的などのためにできるだけ近く一緒として物事を保つために、ファイル名を取り扱うところそのようにしたが、何らかの理由で、元のコードは、クラスをロード金利先に、静的フィールドに誤った値を結合。これを変更する唯一の方法は、呼び出し階層で以前の場所に私の設定値を移動することでしたが、私は、静的フィールドの事に気づいたまでそれが私にいくつかの時間がかかりました。

私に悪い戦略のようになっていることを、私は簡単に私は同じクラスローダは、私は同じクラスを使用して共有するとどのコードを知ることができないので。理論的にはこれは私のコードの実装の詳細、様々な異なる状況で管理者-ディテールを作り、既にJVMを起動するときに、私のシステムプロパティを設定するために私を強制します。システムプロパティは、すべての代わりに、セッションを一度に使用している場合は、私はそれらがセッションかつてのようなだけでなく、ライブ照会されると予想しているでしょう。それ以外の場合は、対応する特定の状況下での設定と使用事例を変更することは困難不要です。

システムプロパティを照会することは地獄のような高価または似ているように大藤、現在のアプローチは、単純に、私は認識していないよ、いくつかの利点を持っているかもしれません。

だから、何をすべきかの理由何MimeBodyPart上記ませんか?

ビル・シャノン:

あなたは正しい、@ maio290、それは意図的に不完全に設計されています。:-)

mutliスレッド・アプリケーションでは、プロパティを照会することは、動的に本当に助けにはなりません。

ほとんどの場合、これらの静的プロパティは、アプリケーションの寿命にわたって変化することが予想されませんでした。

いくつかのケースでは、静的の使用は、それを必要なコードは、セッションへのアクセス権を持っていなかったので、残念な妥協案でした。すべてのAPIを明示的にコードをより複雑になっただろう経由のセッションを渡すために変更します。

スレッドローカルストレージが考えられますが、それはアプリケーションによって使用されるスレッドモデルに過度に依存しました。

可能な限り、セッションのプロパティを使用しますが、いくつかのケースではそのシステムプロパティを使用したことを行うには良い方法はありませんでしたました。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=394533&siteId=1