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
Springeasy

`@Component` vs `@Service` vs `@Repository` — czym się różnią?

Tagi
#component#service#repository
Wróć do kategoriiPrzejdź do quizu

Odpowiedź

Wszystkie to „stereotypy” do component scan; różnica to głównie intencja. `@Service` oznacza logikę biznesową, `@Repository` warstwę dostępu do danych i może tłumaczyć wyjątki persystencji, a `@Component` jest ogólne.

Odpowiedź zaawansowana

Głębiej

Wszystkie trzy adnotacje są meta‑adnotowane `@Component`, więc są wykrywane przez component scan i rejestrowane jako beany. Różnica jest głównie **semantyczna** (komunikacja intencji), ale `@Repository` ma też praktyczny efekt: **tłumaczenie wyjątków persystencji** do spójnej hierarchii Springa `DataAccessException`.

  • `@Component`: ogólny „komponent zarządzany przez Springa”.
  • `@Service`: warstwa serwisowa/logika biznesowa (często miejsce na use-case’y i transakcje).
  • `@Repository`: warstwa persystencji/DAO (JPA/JDBC) + tłumaczenie wyjątków.

Po co ta semantyka

  • Wspiera czyste warstwy (controller → service → repository).
  • Ułatwia AOP/pointcuty (np. aspekty tylko na `@Service`).

Przykład

@Repository
class UserDao {
  // JPA/JDBC
}

@Service
class UserService {
  private final UserDao dao;
  UserService(UserDao dao) { this.dao = dao; }
}

Typowe pułapki

  • Wrzucanie logiki biznesowej do repozytorium.
  • Mylenie `@Service` ze scopem/lifecycle (scope konfiguruje się osobno).
  • Brak `@Repository` na klasach persystencji i utrata spójnych typów wyjątków.

Powiązane pytania

Chmura
Kubernetes Service vs Ingress vs LoadBalancer: co robi każde z nich?
#kubernetes#networking#ingress