Zestawy rozmówBlog

Twoja wymarzona praca? Lets Git IT.
Interaktywna platforma przygotowująca do rozmów technicznych dla nowoczesnych programistów.

XGitHub

Platforma

  • Kategorie

Zasoby

  • Blog
  • O aplikacji
  • FAQ
  • Sugestie

Prawne

  • Polityka prywatności
  • Regulamin

© 2026 LetsGit.IT. Wszelkie prawa zastrzeżone.

LetsGit.IT/Kategorie/Spring
Springmedium

Bean scope w Springu — co znaczy `singleton` vs `prototype`?

Tagi
#bean#scope#singleton#prototype
Wróć do kategoriiPrzejdź do quizu

Odpowiedź

`singleton` (domyślnie) oznacza jedną instancję beana na kontener Springa. `prototype` oznacza nową instancję przy każdym pobraniu; w aplikacjach web są też scope request/session.

Odpowiedź zaawansowana

Głębiej

Scope beana określa *ile instancji* tworzy Spring i *kiedy*.

  • `singleton` (domyślny): jedna instancja **na ApplicationContext** (to nie jest singleton JVM). Jest współdzielony przez wiele wątków, więc powinien być bezstanowy albo thread-safe.
  • `prototype`: nowa instancja przy każdym pobraniu, ale po utworzeniu Spring **nie zarządza w pełni cyklem życia** (np. zwykle nie wywoła destroy callbacków automatycznie).
  • W aplikacjach web są też scope’y: `request`, `session`, `application`, `websocket`.

Prototype w singletonie (częsta pułapka)

Jeśli wstrzykniesz prototype do singletona, dostaniesz **jedną instancję** w momencie wstrzyknięcia. Jeśli potrzebujesz świeżej instancji „na użycie”, wstrzyknij providera.

Przykład

@Component
@Scope("prototype")
class TraceId { /* ... */ }

@Service
class OrderService {
  private final ObjectProvider<TraceId> traceId;
  OrderService(ObjectProvider<TraceId> traceId) { this.traceId = traceId; }

  void handle() {
    TraceId id = traceId.getObject(); // świeża instancja
  }
}

Typowe pułapki

  • Trzymanie stanu requesta/użytkownika w singletonie.
  • Założenie, że prototype jest automatycznie sprzątany przez Spring.
  • Nadużywanie prototype, gdy wystarczy obiekt lokalny w metodzie.

Powiązane pytania

Spring
Co robią `@Configuration` i `@Bean` w Springu?
#configuration#bean#spring-core
Spring
Jakie są zakresy (scopes) Beanów?
#bean#scope#lifecycle
Spring
@Component vs @Bean?
#annotation#configuration#bean
JavaScript
Czym jest closure i podaj typowe zastosowanie.
#closures#scope
JavaScript
Wyjaśnij hoisting w JavaScript. Co jest hoistowane, a co nie?
#hoisting#scope#tdz
JavaScript
Jakie są różnice między var, let i const?
#variables#scope#es6