2012-12-08 8 views
13

Moja aplikacja internetowa korzysta ze źródła IOC. Więc wszystkie moje fasolki wiosenne będą pojedynczo (domyślnie). W przypadku, gdy dwie prośby spróbują uzyskać dostęp do dwóch różnych metod jednej klasy. Na przykład: MySpringBean jest klasą, która ma dwie metody: searchRecord i . Jeśli w tym samym momencie obie metody będą próbowały uzyskać dostęp przez ten sam komponent bean.W jaki sposób współdziałać Konsola fasoli sprężynowej

W jaki sposób ten sam pakiet sprężynowy może być dostępny dla obu klientów w tym samym czasie lub czy wystąpi problem współbieżności, gdy oba żądania będą próbowały uzyskać dostęp do dwóch różnych metod, ale przez ten sam komponent sprężyny. a ponieważ fasola sprężynowa jest singletonem, więc nie można utworzyć nowej instancji. W takim razie jak to zadziała?

Odpowiedz

7

Musisz najpierw zrozumieć, kiedy współbieżność może powodować problemy. Jeśli twój komponent Spring bean jest bezstanowy (nie ma żadnych pól, wszystkie pola są final lub wszystkie z nich są przypisane tylko raz), wiele wątków może bezpiecznie używać tego samego komponentu bean, a nawet tej samej metody.

Zobacz także:

4

Jeśli fasola jest pojedyncza, następnie Wiosna daje ten sam przypadek, w każdym wątku. Od Ciebie zależy, czy uda ci się zabezpieczyć tę fasolę. Ponieważ jest to singleton, najlepiej byłoby uczynić tę klasę bezpaństwowcem.

4

Jak już zasugerowali inni, Spring ma dostarczyć to samo wystąpienie do wszystkich wątków w przypadku ziaren "singleton".

Należy zrozumieć, że wątki wykonują całą pracę w systemie, wykonując kod, podczas gdy obiekty zapewniają stan i zachowanie (kod). Jest więc możliwe, że wiele wątków (żądań w twoim przypadku) będzie jednocześnie uruchamiać te same metody w pojedynczym komponencie bean. Możesz uczynić taką fasolę bezpaństwowcami, tak jak zasugerował Tomasz lub w inny sposób sprawić, by były "bezpieczne dla wątków".

Powiązane problemy