Ich benutze Frühling von mehr als 6 Monaten. Ich bin nicht in der Lage, diesen zugrunde liegenden Mechanismus im Zusammenhang mit dem folgenden Szenario zu verstehen.Wie behandelt Spring MVC mehrere Benutzer
Ich habe eine Spring Web App. Jetzt habe ich das Modell im Controller autowired. Basierend auf der URL-Übereinstimmung ruft es die entsprechende Methode auf. Alle meine Methoden sind Singleton.
Jetzt, wenn zwei Benutzer die App gleichzeitig öffnen, kann der Frühling sie parallel ausführen und ihnen Ergebnisse geben. Ich habe nicht verstanden, wie es das tun kann. Ich meine, da die Bean Singleton ist, muss entweder gewartet werden, bis die Bean nicht verwendet wird, oder die Daten in der Bean überschrieben werden. Aber der Frühling funktioniert richtig. Kann jemand dieses Verhalten mit einer Analogie erklären?
Auf meine Frage deutlich unter ein Stück Code zu erklären:
Meine Standard-Controller ist einfach:
@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;
}
Auch kann jemand mir sagen, wenn zwei Clients die Anwendung wird in zwei separate Modelle öffnen Wird generiert, wenn ich @autowired verwende. Wenn nur eine Modell-Bean für alle Clients existiert, dann sagen Sie, dass die Anfrage von Client 1 gekommen ist und ich 30 Sekunden brauche, um die Ergebnisse zurückzubekommen. Wenn nun der zweite Client die Anfrage in der dritten Sekunde sendet, wird die erste Client-Anfrage überschrieben?
Ich glaube, ich bin verwirrt. Kann jemand klären, wie diese Magie geschieht?
Dank
Sie sollten über [Threads in Anwendungsserver] (http://stackoverflow.com/questions/7457190/how-threads-allocated-to-handle-servlet-request) lesen. – LaurentG
Ich lese die obige Diskussion, aber es ist immer noch nicht klar für mich. Wenn für jede Anfrage ein neuer Thread generiert wird, geschieht dies. Wird neuer thread den ganzen Satz neuer bohnen für ihn kopieren, so dass andere Benutzerdaten diesen Satz nicht überschreiben? Ich weiß nicht, ob ich einen Sinn habe: P – javaMan
die Bohne ist ein Singleton, aber jede Methode bekommt ihre eigene Referenz, pro Thread, auf dem Stapel ... – NimChimpsky