Sobes.tech
Junior — Middle

Lehetséges-e olyan komponens megvalósítása, amely kontrollerként működik, anélkül, hogy az @Controller annotációt használnánk?

sobes.tech MI

Válasz az MI-től

Igen, lehet olyan komponenst megvalósítani, amely a vezérlő szerepét tölti be anélkül, hogy a @Controller annotációt használnánk Springben. A @Controller csupán egy sztereotípia, amely segíti a Springet abban, hogy észlelje és regisztrálja az osztályt MVC kontextusban.

Alternatívák:

  • A @Component vagy @Service annotáció használata, és a routing kézi konfigurálása.
  • Spring WebFlux-ban funkcionális útvonalakat (RouterFunction) és kezelőket lehet használni @Controller nélkül.
  • Programozott módon lehet létrehozni egy vezérlő bean-t, és regisztrálni azt a kontextusban.

Azonban @Controller vagy hasonló annotációk nélkül a Spring nem tudja automatikusan összekapcsolni a HTTP-kéréseket az osztály metódusaival. Ezért általában a @Controller vagy @RestController használata a kényelmes és deklaratív megoldás.

Példa @Controller nélkül, a Spring WebFlux funkcionális stílusát használva:

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

Így megvalósítható egy vezérlő anélkül, hogy annotációt használnánk, de ez más megközelítést igényel az útvonalak és a kéréskezelés terén.