que mvc form example spring spring-mvc

form - spring mvc que es



¿Cómo maneja Spring MVC a múltiples usuarios? (1)

Estoy usando la primavera desde más de 6 meses. No puedo entender este mecanismo subyacente relacionado con el siguiente escenario.

Tengo una aplicación web de primavera. Ahora autowired el modelo en el controlador. En función de la correspondencia de url, llama al método respectivo. todos mis métodos son únicos.

Ahora, cuando dos usuarios abren la aplicación al mismo tiempo, Spring puede ejecutarlos paralelamente y ofrecerles resultados. No entendí cómo puede hacer esto. quiero decir que como el frijol es singleton tiene que esperar hasta que el frijol no se utiliza o sobrescribir los datos en el frijol. Pero la primavera está funcionando correctamente. ¿Alguien puede explicar este comportamiento con alguna analogía?

Explicar mi pregunta claramente a continuación es una pieza de código:

Mi controlador predeterminado es simple:

@Autowired private AppModel aModel; public AppModel getModel(){ return aModel; } public void setModel(AppModel aModel){ this.aModel = aModel; } @RequestMapping(method = RequestMethod.GET) public ModelAndView defaultGetter(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mav = new ModelAndView(getViewName()); mav.addObject("model", aModel); Runtime.getRuntime().gc(); return mav; }

También puede alguien decirme que cuando dos clientes abren la aplicación se generarán dos modelos separados cuando utilizo @autowired. Si solo existe un modelo de bean para todos los clientes, entonces diga que la solicitud del cliente 1 entró y me llevó 30 segundos recuperar los resultados. Ahora, si el segundo cliente envía la solicitud en el tercer seg, ¿se sobrescribirá la primera solicitud de los clientes?

Creo que me estoy confundiendo ¿Puede alguien aclarar cómo está sucediendo esta magia?

Gracias


Cada solicitud web genera un nuevo hilo como se explica en este hilo .

Spring maneja diferentes ámbitos (prototipo, solicitud, sesión, singleton). Si dos solicitudes simultáneas acceden a un bean singleton, entonces el bean debe ser sin estado (o al menos sincronizado para evitar problemas). Si accede a un bean en solicitud de alcance, se generará una nueva instancia por solicitud. Spring maneja esto para usted, pero debe tener cuidado y usar el alcance correcto para sus granos. Por lo general, su controlador es un singleton, pero el AppModel debe ser de alcance, de lo contrario tendrá problemas con dos solicitudes simultáneas. Este hilo también podría ayudarte .

Acerca de su última pregunta "¿cómo está sucediendo esta magia?", La respuesta es "aspecto / proxy". Spring crea clases de proxy. Puedes imaginar que Spring creará un proxy para tu clase de AppModel . Tan pronto como intente acceder a él en el controlador, Spring reenvía la llamada al método a la instancia correcta .