この方法でThreadLocalを使用することは、共有状態を維持するためにある種のシングルトンに依存していることを意味します。最終的に、これは、機能のカプセル化の難しさ、依存関係の認識、機能の交換(またはモックアウト)の不能など、多くの欠点があるため、通常は不十分な設計と見なされます。
属性またはセッションを使用することによるパフォーマンスのオーバーヘッドは、シングルトンでのThreadLocal変数のあまり一般的でない提案を処理する場合と比較して、おそらく価値があります。ただし、これはもちろん、特定のユースケースとプロジェクトによって異なります。アプリケーションの状態を維持する方法としてサーブレットでシングルトンを使用することは、アプリケーションの状態をサーブレットと共有することが難しいため(依存関係を挿入するのが難しい)、ある程度一般的ですが、これらのオブジェクトのシングルトンオブジェクトがユーザーごとの状態(EJB以外)を維持することはまれです。 )。
セッションを使用する場合、またはコンテナオブジェクトを属性として設定する場合は、String(O(1))を介した単一のフェッチのみを処理し、次にコンテナタイプ(必要なすべての値)。さらに後のコードを呼び出すには、必要に応じてパラメーターを取得し、任意のタイプのグローバルまたはシングルトンを使用することをできるだけ避ける必要があります。
最終的に、パフォーマンスという名目でやや変わった(賢い)ソリューションを検討する前に、常に最初に単純な実装をテストして、そのパフォーマンスが適切かどうかを確認してください。ここで保存される可能性のある2nsは、dbクエリとtcp接続の確立に費やされる20+msと比較しておそらく重要ではありません。