シングルトンでは、使用の短所と利点は何ですか
private static final String QUERY = "some valid query";
以上
private final String QUERY = "some valid query";
回答 3 件
「静的最終」アプローチは、いくつかのことを行います。
すべてのインスタンスで共有される1つのフィールドのみが作成されます
フィールドは、クラスがロードされるときに作成されます
フィールドは変更できません
インスタンスを作成せずに、パブリックフィールドに他のクラスからアクセスできます。
これは非常に一般的なアプローチであり、クラスのLoggerインスタンスを作成するなど、それが最良の選択肢である場所があります。文字列定数に関する限り。
あなたの場合、文字列インターンにより、ランタイムは、含まれるクラスのすべてのインスタンスによって参照される文字列のインスタンスを1つだけ作成し、シングルトンでは、コンテナのインスタンスは1つだけになります。したがって、パフォーマンス上の利点はありません。
とはいえ、定数の使用はベストプラクティスと見なされます。
ほとんどのBeanがシングルトンであるSpringパースペクティブでは、違いはありません。もう1つのポイントは、フレームワーク固有ではないコードを作成し、ベストプラクティスに従うことです。 Springはjavaですが、javaはSpringではありません(ご理解いただければ幸いです)。
関連した質問
- DTO、エンティティを使用してSpring Bootを作成しましたが、保存できません
- 現在のリクエストからFeignインターセプターを介して動的ヘッダー値をfeign-clientに追加するにはどうすればよいですか?
- Hibernateで外部キー制約を削除できません
- 別のjarからインポートされたサービスを自動配線するにはどうすればよいですか?
- サービスレイヤーで検証が行われるときのWebレイヤーのテスト:SpringBootテスト
- Springコンテキストの循環依存を解決する方法は?
- タイプ「comjpadaoUserRepository」の適格なBeanはありません
- コントローラで@AsyncとCompletableFutureを使用すると、APIのパフォーマンスを向上させることができますか?
- Grails Spring SecurityCoreチュートリアルの実行中に「進行中のトランザクションはありません」エラー
- Spring Data MongoDB、長い値で検索
あなたの場合、不変オブジェクトがあります。
final String s = "foo";
の宣言 またはstatic final String s = "foo";
これは定数であるため、あまり変化しません。それは決して変わりません。常識はそれを
static
に設定するように言っています 作成されるインスタンスの数を制限します。 (String
は1つだけです 文字列プールのためにまだ作成されます)可変オブジェクトを要求する場合、これは異なります。たとえば、
List
、final
と宣言 後で変数を再初期化することはできませんが、コンテンツの変更はできません。これにより、2つのリストが得られます。1つはすべてのインスタンスに共通です(
static
)およびインスタンスのメンバーであるもの。String
を追加します でlist1
どのインスタンスからでもアクセス可能String
のみを追加します 一例です。その場合は、
static
と宣言します 違いが生じる・異なる。インスタンスメンバーのすべてのポイントは、コンストラクターではなく、宣言中に初期化された変数に基づいて行われます。
これは定数ではないため、そのケースは異なります。各インスタンスは異なる
String
を使用します 値。