W Spring framework, możemy tworzyć beany w 6 wbudowanych zakresach spring bean scopes, a także możemy zdefiniować własny zakres beanów. Z tych sześciu zakresów, cztery są dostępne tylko wtedy, gdy używasz web-aware ApplicationContextsingleton i prototype zakresy są dostępne w każdym typie kontenerów IOC.

Table of Contents1. Spring Bean Scope Types 1.1. singleton scope 1.2. prototype scope 1.3. request scope 1.4. session scope 1.5. application scope 1.6. websocket scope2. Custom thread scope3. Summary

Spring Bean Scopes Type

W Spring, zakres może być zdefiniowany za pomocą adnotacji spring bean @Scope. Wymieńmy szybko wszystkie sześć wbudowanych zakresów beanów dostępnych do użycia w kontekście aplikacji wiosennej. Te same zakresy odnoszą się również do zakresu beanów Spring Boot.

Scope Description
singleton (domyślnie) Jedna instancja obiektu bean na kontener Spring IoC
prototype Opposite to singleton, tworzy nową instancję za każdym razem, gdy fasola jest żądana.
request Pojedyncza instancja będzie tworzona i dostępna podczas całego cyklu życia żądania HTTP.

Tylko ważne w web-aware Spring ApplicationContext.

session Pojedyncza instancja zostanie utworzona i będzie dostępna podczas pełnego cyklu życia sesji HTTP.

Ważne tylko w web-aware Spring ApplicationContext.

application Pojedyncza instancja zostanie utworzona i będzie dostępna podczas pełnego cyklu życia ServletContext.

Tylko ważne w web-aware Spring ApplicationContext.

websocket Pojedyncza instancja zostanie utworzona i będzie dostępna podczas pełnego cyklu życia WebSocket.

Tylko ważne w web-aware Spring ApplicationContext.

1.1. singleton scope

singleton jest domyślnym zakresem beana w kontenerze Spring. Mówi on kontenerowi, aby tworzył i zarządzał tylko jedną instancją klasy bean, na kontener. Ta pojedyncza instancja jest przechowywana w pamięci podręcznej takich singletonowych fasolek, a wszystkie kolejne żądania i odwołania do tej nazwanej fasolki zwracają zbuforowaną instancję.

Przykładowy singleton scope bean przy użyciu konfiguracji Java –

Przykładowy singleton scope bean przy użyciu konfiguracji XML –

1.2. prototyp scope

prototype scope skutkuje tworzeniem nowej instancji beana za każdym razem, gdy kod aplikacji zgłasza żądanie dotyczące beana.

Powinieneś wiedzieć, że metody cyklu życia fasoli destrukcyjnej nie są wywoływane prototype scoped bean, wywoływane są tylko metody wywołania zwrotnego inicjalizacji. Tak więc jako deweloper, jesteś odpowiedzialny za wyczyszczenie instancji fasoli o domenie prototypowej i wszelkich zasobów, które przechowują.

Przykład konfiguracji java dla zakresu prototypu beana –

@Component@Scope("prototype")public class BeanClass {}

Przykład konfiguracji XML dla zakresu prototypu beana –

<bean class="com.howtodoinjava.BeanClass" scope="prototype" />
Z reguły, powinieneś preferować używanie zakresu prototype dla wszystkich stateful beanów i zakresu singleton dla stateless beanów.
Aby używać fasoli w zakresach żądania, sesji, aplikacji i websocket, należy zarejestrować RequestContextListener lub RequestContextFilter.

1.3. zakres żądania

W zakresie request kontener tworzy nową instancję dla każdego żądania HTTP. Jeśli więc serwer obsługuje 50 żądań, to kontener może posiadać co najwyżej 50 indywidualnych instancji klasy bean. Jakakolwiek zmiana stanu jednej instancji, nie będzie widoczna dla innych instancji. Instancje te są niszczone zaraz po zakończeniu żądania.

Przykład konfiguracji java zakresu request bean –

@Component@Scope("request")public class BeanClass {}//or@Component@RequestScopepublic class BeanClass {}

Przykład konfiguracji XML zakresu request bean –

<bean class="com.howtodoinjava.BeanClass" scope="request" />

Read More: Jak działają serwery WWW?

1.4. zakres sesji

W session zakresie, kontener tworzy nową instancję dla każdej sesji HTTP. Jeśli więc serwer ma 20 aktywnych sesji, to kontener może mieć co najwyżej 20 indywidualnych instancji klasy bean. Wszystkie żądania HTTP w czasie trwania pojedynczej sesji będą miały dostęp do tej samej pojedynczej instancji beana w tym zakresie sesji.

Każda zmiana stanu jednej instancji, nie będzie widoczna dla innych instancji. Instancje te są niszczone, gdy tylko sesja zostanie zniszczona/ zakończona na serwerze.

Przykład konfiguracji java zakresu session bean –

@Component@Scope("session")public class BeanClass {}//or@Component@SessionScopepublic class BeanClass {}

Przykład konfiguracji XML zakresu session bean –

<bean class="com.howtodoinjava.BeanClass" scope="session" />

1.5. zakres aplikacji

W application zakresie, kontener tworzy jedną instancję na runtime aplikacji internetowej. Jest on prawie podobny do singleton scope, z dwoma tylko różnicami tj.

  1. application scoped bean jest singletonem na ServletContext, podczas gdy singleton scoped bean jest singletonem na ApplicationContext. Należy pamiętać, że może istnieć wiele kontekstów aplikacji dla pojedynczej aplikacji.
  2. application scoped bean jest widoczny jako atrybut ServletContext.

Java config przykład zakresu beana aplikacji –

@Component@Scope("application")public class BeanClass {}//or@Component@ApplicationScopepublic class BeanClass {}

XML config przykład zakresu beana aplikacji –

<bean class="com.howtodoinjava.BeanClass" scope="application" />

1.6. zakres websocket

Protokół WebSocket umożliwia dwukierunkową komunikację pomiędzy klientem a zdalnym hostem, który wyraził zgodę na komunikację z klientem. Protokół WebSocket zapewnia pojedyncze połączenie TCP dla ruchu w obu kierunkach. Jest to szczególnie przydatne w aplikacjach wieloużytkownikowych z jednoczesną edycją oraz w grach wieloużytkownikowych.

W tego typu aplikacjach internetowych protokół HTTP jest używany tylko do początkowego uścisku dłoni. Serwer może odpowiedzieć statusem HTTP 101 (przełączenie protokołów), jeśli zgadza się na żądanie handshake. Jeśli handshake się powiedzie, gniazdo TCP pozostaje otwarte i zarówno klient jak i serwer mogą używać go do wysyłania wiadomości do siebie nawzajem.

Przykład konfiguracji java z zakresu bean websocket –

@Component@Scope("websocket")public class BeanClass {}

Przykład konfiguracji XML z zakresu bean websocket –

<bean class="com.howtodoinjava.BeanClass" scope="websocket" />

Proszę zauważyć, że websocket scoped beans są zazwyczaj singletonami i żyją dłużej niż jakakolwiek indywidualna sesja WebSocket.

Niestandardowy zakres wątku

Spring zapewnia również nie-domyślny thread zakres używając klasy SimpleThreadScope. Aby użyć tego zakresu, musisz zarejestrować go w kontenerze za pomocą klasy CustomScopeConfigurer.

Każde żądanie dla fasoli zwróci tę samą instancję w tym samym wątku.

Przykład konfiguracji java zakresu wątku bean –

@Component@Scope("thread")public class BeanClass {}

Przykład konfiguracji XML zakresu wątku bean –

<bean class="com.howtodoinjava.BeanClass" scope="thread" />

Podsumowanie

Spring udostępnił sześć zakresów spring bean i instancje mają różny czas życia w każdym zakresie. Jako deweloper musimy mądrze wybrać zakres dowolnego beana zarządzanego przez kontener. Ponadto, musimy podejmować mądre decyzje, gdy fasolki o różnych zakresach odwołują się do siebie nawzajem.

Postaraj się zapamiętać wszystkie powyższe informacje, aby odpowiedzieć na każde pytanie na rozmowie kwalifikacyjnej dotyczące zakresu Spring Bean.

Happy Learning !!

Czy ten post był pomocny?

Daj nam znać, jeśli podobał Ci się ten post. To jedyny sposób, abyśmy mogli się poprawić.
Tak
Nie

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *