Używam sprężyny od ponad 6 miesięcy. Nie jestem w stanie zrozumieć tego podstawowego mechanizmu związanego z poniższym scenariuszem.W jaki sposób Spring MVC obsługuje wielu użytkowników?
Mam aplikację internetową wiosenną. Teraz wypromieniowałem model w kontrolerze. Na podstawie dopasowania adresu URL wywołuje odpowiednią metodę. wszystkie moje metody są singleton.
Teraz, gdy dwaj użytkownicy otwierają aplikację w tym samym czasie, Spring może je uruchomić równolegle i podać im wyniki. Nie wiedziałem, jak to zrobić. Mam na myśli, że jak fasola jest singleton musi albo czekać, aż fasola nie zostanie użyta, albo nadpisać dane w ziarnie. Ale wiosna działa poprawnie. Czy ktoś może wyjaśnić to zachowanie z pewną analogią.
Aby wyjaśnić moje pytanie wyraźnie poniżej jest kawałek kodu:
domyślną sterownika jest prosta:
@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;
}
Także może ktoś mi powiedzieć, kiedy dwaj klienci otworzyć Aplikacja będzie dwa modele oddzielne generowane, gdy używam @autowired. Jeśli dla wszystkich klientów istnieje tylko jeden komponent bean modelu, oznacza to, że żądanie klienta 1 pojawiło się, a odebranie wyników zajmie mi 30 sekund. Jeśli teraz drugi klient wyśle żądanie w ciągu 3 sekund, to pierwsze żądanie klienta zostanie zastąpione?
Myślę, że jestem zdezorientowany. Czy ktoś może wyjaśnić, w jaki sposób działa ta magia?
Dzięki
Powinieneś przeczytać o [wątkach w serwerach aplikacji] (http://stackoverflow.com/questions/7457190/how-threads-allocated-to -handle-servlet-request). – LaurentG
Przeczytałem powyższą dyskusję, ale nadal nie jest to dla mnie jasne. Jeśli nowy wątek jest generowany dla każdego żądania, gdy tak się dzieje. czy nowy wątek będzie miał skopiowany cały zestaw nowych fasoli, aby inni użytkownicy nie zapisali tego zestawu? Nie wiem, czy mam jakiś sens: P – javaMan
Fasolka to singleton, ale każda metoda otrzymuje własne odniesienie, na wątek, na stosie ... – NimChimpsky