Sobes.tech
Junior — Middle

Czy możliwa jest implementacja komponentu pełniącego rolę kontrolera bez użycia adnotacji @Controller?

sobes.tech AI

Odpowiedź od AI

Tak, można zaimplementować komponent pełniący rolę kontrolera bez użycia adnotacji @Controller w Spring. Adnotacja @Controller to po prostu stereotyp, który pomaga Springowi wykrywać i rejestrować klasę jako kontroler w kontekście MVC.

Alternatywy:

  • Użycie adnotacji @Component lub @Service i ręczne skonfigurowanie routingu przez konfigurację.
  • W Spring WebFlux można używać funkcjonalnych tras (RouterFunction) i obsługiwaczy bez adnotacji @Controller.
  • Można utworzyć bean kontrolera programowo i zarejestrować go w kontekście.

Jednak bez @Controller lub podobnych adnotacji Spring nie będzie mógł automatycznie powiązać żądań HTTP z metodami klasy. Dlatego zwykle @Controller lub @RestController są używane dla wygody i deklaratywności.

Przykład bez @Controller, korzystając z stylu funkcjonalnego w Spring WebFlux:

@Bean
public RouterFunction<ServerResponse> route() {
    return RouterFunctions.route()
        .GET("/hello", request -> ServerResponse.ok().bodyValue("Hello World"))
        .build();
}

W ten sposób można zaimplementować kontroler bez adnotacji, ale wymaga to innego podejścia do routingu i obsługi żądań.