Soy nuevo en Spring-mvc. En mi primer tutorial tengo una duda, creamos un servelet de DispatcherServlet en web.xml y marcamos nuestro controlador usando la anotación @contorller . Luego, usando la anotación @Requestmapping , filtramos la URL para que se invoque la función.
¿Cómo Spring busca el controlador en la aplicación web? ¿Qué función se invocó realmente en DispatcherServelet para crear una instancia de clase de controlador? ¿Puedo tener varios controladores en mi aplicación?
¿Cómo Spring busca el controlador en la aplicación web?
El contenedor de Spring escanea todos los paquetes especificados a través de la anotación @ComponentScan
(o usando component-scan
en la configuración xml) y cuando marca su clase de bean con una anotación de estereotipo como @Controller
, el contenedor de Spring creará la instancia (por defecto, alcance único) de su clase de controlador y asigna la URL junto con el tipo de método de solicitud (como GET
, POST
, PUT
, etc.). Las otras anotaciones de estereotipos se enumeran aquí (como @Service
, etc.) y el contenedor también crea objetos para estos tipos.
¿Qué función se invocó realmente en DispatcherServelet para crear una instancia de clase de controlador?
El contenedor Spring Core crea las instancias para todos los beans anotados con estereotipos (como se explicó anteriormente durante el inicio del contenedor) y luego Dispatcherservlet
usa HandlerMapping para asignar las URL a los métodos del controlador y la implementación de RequestMappingHandlerMapping
se usa de forma predeterminada y cuando llega la solicitud, lo hará. ser delegado al respectivo método del controlador, puede mirar aquí .
¿Puedo tener varios controladores en mi aplicación?
Sí, puede definir múltiples controladores en su aplicación. En un proyecto de aplicación web típico, vería muchas clases de controlador, cada una asignada con las direcciones URL respectivas y la lógica comercial que se maneja a través de sus clases de servicio.
Le sugiero que consulte esto para comprender cómo funciona el flujo web de primavera.