Spring - singleton scope

0

Ponoć uważa się że spamowanie singletonami to anty-pattern, w takim razie czy tworzenie serwisów/beanów w springu oznaczając je @Service ze scopem singleton to dobra praktyka? Tak się powinno robić? Czy może lepiej bazować na request scope? Trochę się to kłóci z REST-API, oprócz tego jest chyba większe obciążenie gc.
Co o tym myślicie? Jaką praktykę wy stosujecie?

1

Wzorzec Singleton jest uważany za antywzorzec, bo utrudnia pisanie testów jednostkowych. Są dokładnie te same problemy co przy zmiennych globalnych. Component ze Springa czy Guice nie ma tych problemów. Zwłaszcza jak go przekazujesz przez parametr konstruktora. W zasadzie to Wzorzec Singleton też nie jest problemem pisanie testów jednostkowych jak go przekazujesz przez parametr.
Wniosek. Wszystkie zależności należy przekazywać przez parametry wtedy prościej pisze się testy jednostkowe

0
Kamil Żabiński napisał(a):

Wzorzec Singleton jest uważany za antywzorzec, bo utrudnia pisanie testów jednostkowych. Są dokładnie te same problemy co przy zmiennych globalnych. Component ze Springa czy Guice nie ma tych problemów. Zwłaszcza jak go przekazujesz przez parametr konstruktora. W zasadzie to Wzorzec Singleton też nie jest problemem pisanie testów jednostkowych jak go przekazujesz przez parametr.
Wniosek. Wszystkie zależności należy przekazywać przez parametry wtedy prościej pisze się testy jednostkowe

Czyli w praktyce w kodzie pracujesz tylko na singleton scopie?

1
Vincent_zyx napisał(a):
Kamil Żabiński napisał(a):

Wzorzec Singleton jest uważany za antywzorzec, bo utrudnia pisanie testów jednostkowych. Są dokładnie te same problemy co przy zmiennych globalnych. Component ze Springa czy Guice nie ma tych problemów. Zwłaszcza jak go przekazujesz przez parametr konstruktora. W zasadzie to Wzorzec Singleton też nie jest problemem pisanie testów jednostkowych jak go przekazujesz przez parametr.
Wniosek. Wszystkie zależności należy przekazywać przez parametry wtedy prościej pisze się testy jednostkowe

Czyli w praktyce w kodzie pracujesz tylko na singleton scopie?

Tak. Innych skopów używałem tylko jak pracowałem z Spring MVC lub JSF (PrimeFaces). Ale odkąd front piszą frontendowcy a ja wystawiam tylko endpointy to używam tylko Singletonów. Czasem wstrzykuje je Springiem ale jak mam wybór to wolę Guice lub ręczne zarządzanie tym w metodzie main()

0

Tak na prawdę oznaczenie jako @Service to nie do końca to samo co singleton, bo to dopiero spring zrobi z niego singletona. Do tego czasu można go uzywać jak normalnego obiektu.

3

Wg. mnie to jest jakiś wydumany problem :) używanie @Component/@Repository/@Service jest ok, chyba, że masz jakiś egzotyczny case, np. musisz trzymać stan

1 użytkowników online, w tym zalogowanych: 0, gości: 1