Czy dodając adnotację do klasy @Component, oznacza to, że jest to Spring Bean i Singleton?


111

Będąc całkiem nowym w Spring, mam pytanie dotyczące dodawania adnotacji do zajęć. Czy dodawanie adnotacji do klasy @Componentoznacza, że ​​będzie to Spring Bean, a domyślnie singleton?

Odpowiedzi:


130

Tak, zgadza się, @Componentto wiosenna fasola i singleton.

Jeśli klasa należy do warstwy usług, możesz @Servicezamiast tego dodać do niej adnotację

Pamiętaj jednak, że aby te adnotacje zostały wykryte, musisz umieścić ten wiersz w applicationContext.xml:

<context:component-scan base-package="com.yourcompany" />

Informacje o singletonach - wszystkie fasolki jare są domyślnie w zakresie pojedynczych. Jedyną rzeczą, o której musisz pamiętać, jest to, że nie powinieneś przechowywać stanu w zmiennych polowych (powinny one zawierać tylko zależności). Dzięki temu Twoja aplikacja będzie bezpieczna dla wątków i nie będziesz potrzebować za każdym razem nowej instancji komponentu bean. Innymi słowy, Twoje ziarna są bezpaństwowcami.


1
Czy podczas korzystania z adnotacji @Component i / lub @Service itp., Co oznacza, że ​​tworzę Singletony, nie napotkam problemów z współbieżnością? Według mojego początkującego pomysłu spowoduje to powstanie fasoli, która jest używana w całym ApplicationContext, więc współbieżni użytkownicy otrzymają odniesienie do pojedynczego ziarna. A może coś mi brakuje?
— Marco

3
@Marco, jeśli nie masz żadnego stanu (zmienne instancji inne niż jary), nie wystąpią żadne problemy ze współbieżnością.
— Bozho

„chcesz” wymagać za każdym razem nowej instancji fasoli czy też „nie będziesz potrzebować nowej instancji fasoli za każdym razem?
— Harshana

@Bozho Co masz na myśli mówiąc: „i nie będziesz potrzebować za każdym razem nowej instancji fasoli”? Czy oznacza to, że Spring nie będzie musiał tworzyć nowej instancji lub Ty jako programista nie będziesz musiał tworzyć nowej instancji?
— user1766169

25

Domyślnie - tak.

Możesz jednak zmienić to zachowanie, używając @Scopeadnotacji. Na przykład:@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.