Sobes.tech
Middle

Na czym polega różnica między adnotacjami Repository, Component, Controller i Service w Spring?

sobes.tech AI

Odpowiedź od AI

Te adnotacje są adnotacjami stereotypowymi dla komponentów Spring:

  • @Component: Podstawowa adnotacja dla dowolnego komponentu zarządzanego przez kontener IoC Spring. Zakłada, że klasa jest ogólnym komponentem aplikacji.
  • @Repository: Specjalna adnotacja dla klas wykonujących operacje na danych (DAO). Spring zapewnia dodatkowe możliwości, takie jak automatyczne tłumaczenie wyjątków JDBC na Spring DataAccessException.
  • @Service: Specjalna adnotacja dla klas zawierających logikę biznesową. Wskazuje, że klasa jest usługą na poziomie logiki biznesowej.
  • @Controller: Specjalna adnotacja dla klas używanych jako kontrolery w warstwie web. Zazwyczaj używana w Spring MVC do obsługi przychodzących żądań webowych.

Wszystkie te adnotacje są meta-adnotacjami dla @Component, co oznacza, że klasa oznaczona którąkolwiek z nich będzie uważana przez Spring za komponent. Główna różnica leży w semantyce i specjalistycznej funkcjonalności, którą Spring może zapewnić dla każdej z nich.

// Przykład użycia @Component
@Component
public class MyGenericComponent {
    // ogólna funkcjonalność
}

// Przykład użycia @Repository
@Repository
public class UserRepository {
    // operacje na bazie danych
}

// Przykład użycia @Service
@Service
public class UserService {
    // logika biznesowa
}

// Przykład użycia @Controller
@Controller
public class UserController {
    // obsługa żądań webowych
}