Używam Spring framework. Czy moje klasy usług powinny być tworzone jako single? Czy ktoś może wyjaśnić, dlaczego i dlaczego nie? Dzięki!Czy klasy warstwy usług powinny być pojedynczymi?
Odpowiedz
Tak, powinny należeć do zakresu singleton
. Usługi powinny być bezpaństwowcami, a więc nie potrzebują więcej niż jednej instancji.
Tym samym zdefiniowanie ich w zakresie singleton
zaoszczędziłoby czas na ich utworzenie i połączenie.
singleton
to domyślny zakres na wiosnę, więc po prostu pozostaw swoje definicje fasoli bez zmian, bez wyraźnego określania atrybutu scope
.
Możesz przeczytać więcej na temat zakresów in the spring docs.
Wiosna jest łatwiejsza w użyciu, jeśli trzymasz się fasoli pojedynczej. Singleton to jego "domyślna pozycja", jeśli chcesz. Tak, obsługuje on inne zakresy (używając scope="xyz"
w pliku XML), ale utrudnia korzystanie z niego i obniża wydajność.
Zasadniczo, chyba że masz dobry powód, by postąpić inaczej, trzymaj się singletonów.
Potrzebujesz głównie singletonów. (Spring default.) Singletony muszą być wątkowo bezpieczne, ponieważ żądania równoległe będą używać tego samego pojedynczego wystąpienia. W rzeczywistości muszą być całkowicie bezpaństwowi, ponieważ mogą być niszczone i odtwarzane w dowolnym momencie.
Jeśli chcesz śledzić stan wewnątrz swojej fasoli (nie powinieneś, to powinno być w bazie danych lub zapisane w żądaniu), otrzymasz wiele wystąpień tego samego rodzaju fasoli, zużycie pamięci rośnie z liczbą żądań, przy czym w przypadku singletonów nadal będziesz mieć tylko jedną instancję.
Nawet jeśli zgrupujesz fasolę do żądania, to nadal potrzebujesz przynajmniej wątku bezpieczeństwa (żądania przychodzące z tej samej przeglądarki w tym samym czasie).
Jednorożec wiosenny może * nie * zostać utworzony i zniszczony w dowolnym momencie, nie wiem skąd to masz (może mieszałeś je z ziarenkami sesji EJB). Również zmienny stan w singletonie Spring jest absolutnie w porządku, po prostu musisz wiedzieć, jakie operacje można wykonać na tym wspólnym stanie. – skaffman
Dzięki. Jestem nowy w Spring, wiem, jak napisać klasę singleton, ale jak ustawić "zakres singleton" używając Spring? – oym
Och, nie widziałem twojego komentarza o tym, że jest to domyślny zakres. Czy mógłbyś mi wyjaśnić, gdzie ten zakres jest ustawiony i skonfigurowany tylko po to, abym mógł wiedzieć, jak wszystko jest podłączone? Dzięki jeszcze raz. – oym
Dodałem link do mojej odpowiedzi. – Bozho