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
- 1. Czy nazwy reprezentujące typy szablonów powinny być pojedynczymi znakami?
- 2. Czy metody warstwy usług powinny oczekiwać wystąpień lub identyfikatorów?
- 3. Domeny, DAO i warstwy usług
- 4. Czy jednostki miary powinny być zlokalizowane?
- 5. Czy języki programowania powinny być intuicyjne?
- 6. Czy aplikacje sieciowe mvc powinny być 3-te?
- 7. Czy konteksty danych powinny być statyczne?
- 8. Czy IBOutlety powinny być ivars lub właściwości?
- 9. Czy obiekty enum powinny być bezpaństwowcami?
- 10. Czy metatagi powinny być kodowane w HTML?
- 11. Klasy usług Refactoring Service
- 12. Tylko właściwości powinny być usunięte
- 13. Jak złożone powinny być modele?
- 14. Czy zakresy zależności zależności Maven powinny być uważane za przestarzałe?
- 15. Czy typy wyliczeniowe Java powinny być pisane wielkimi literami?
- 16. Czy klasa usług powinna być pojedyncza w java?
- 17. IOC - Czy klasy użytkowe ze statycznymi metodami pomocniczymi powinny być połączone z IOC?
- 18. @ Testowa klasa testowa wpływa na sposób funkcjonowania warstwy usług transakcyjnych
- 19. Czy wydarzenia i strumienie CUDA zawsze powinny być niszczone?
- 20. Czy programy obsługi zdarzeń powinny być ozdobione ich przedstawicielem?
- 21. Czy obiekty obiektu powinny być odsłonięte przez repozytorium?
- 22. Czy ciągi .NET naprawdę powinny być uważane za niezmienne?
- 23. Czy moje obiekty aktorów Akka powinny być oznaczone jako @volatile?
- 24. Czy WCF DataContracts powinny być wartością lub typem odniesienia?
- 25. Czy tablice powinny być traktowane jako struktury poziome lub pionowe?
- 26. Wątki Java: czy wszystkie zmienne współdzielone powinny być zmienne?
- 27. Czy instancje obiektu modelu django powinny być przekazywane do selera?
- 28. Czy paski nawigacyjne zawsze powinny być wyświetlane jako listy?
- 29. Jakie dokumenty powinny być przechowywane w kontroli wersji i jak powinny być przechowywane?
- 30. Jak różne powinny być losowe nasiona?
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