2015-04-02 15 views
12

uczę MVC wiosny i mam następujące wątpliwości:Jak dokładnie działa zakres sesji Springa komponentu bean? jaki jest domyślny zakres komponentu bean w kontekście sieciowym?

  1. co dokładnie jest cel zakresu sesji?

Czytanie dokumentacji Wiem, że to rozszerza definicję komponentu bean do sesji HTTP. Ważne tylko w kontekście kontekstu aplikacji Spring Spring. A także, że nowa instancja jest tworzona raz na sesję użytkownika.

Ale kiedy dokładnie jest używany? i w jakim celu? Czy możesz zrobić praktyczny przykład?

  1. Wiosną MVC jaki jest domyślny zasięg w kontekście sieciowym?

wiem, że na wiosnę zakres domyślny dla fasoli jest Singleton ale co o zakresie fasoli w kontekście WWW?

+1

Brzmi jak znasz odpowiedzi. Wstrzykiwanie komponentu bean do kontekstu sieci nie zmienia jego domyślnego zakresu. Ustalanie zakresu do sesji jest wygodnym sposobem przechowywania stanu odpowiedniego dla konkretnej sesji użytkownika. Kończy się jedna instancja na sesję. Poniżej znajduje się przykład, w którym użyłem go do utworzenia długiej sesji Drools dla każdego użytkownika: https://github.com/gratiartis/qzr/blob/master/qzr-web/src/main/java/com/ sctrcd/qzr/services/HrMaxQuizService.java – Steve

+0

@Steve Tnx, ale jeśli naprawdę znam odpowiedź, nie pytam o to. Co najwyżej mogę się zorientować, co może się wydarzyć, ale nie jestem do końca tego pewien, ponieważ go badam i nie mam empirycznego doświadczenia – AndreaNobili

Odpowiedz

8

Ans 1) zakres sesji jest bardzo podobny do zakresu HttpSession. Fasola tworzona na podstawie zasięgu zakresu sesji odbywa się poprzez sesję HTTP. Podobnie jak w przypadku zakresu żądania, ma on zastosowanie tylko w kontekście aplikacji kontekstowych korzystających z sieci WWW.

/** * Annotation-based configuration of session scope */ 
@Component 
@Scope("session") 
public class ShopCart { } 

a następnie

@Inject 
private ShopCart cart; 

Ans 2) Domyślne Singleton wszędzie.

10
  1. Używasz ziaren sesji wiosennych dla fasoli, które są stanowe i ich stan różni się dla każdego użytkownika. Mogą to być na przykład preferencje aktualnie zalogowanego użytkownika.
  2. Domyślny zakres fasoli na wiosnę to jeden singlet i nie różni się w kontekście aplikacji sieci Web.

Zauważ, że w środowisku internetowym można również użyć Ziarno o ograniczonej liczbie pasm i ŻYCIE jest tylko na jedno żądanie użytkownika. Powinieneś używać zakresu żądania, gdy sesja nie jest konieczna, a żądanie jest wystarczające.

Ponadto w środowisku portletów można użyć innego zakresu, którym jest SESJA GLOBALNA. Każdy portlet ma swoją własną niezależną sesję i zazwyczaj te portlety są preferowane, aby mieć własny stan zamknięty tylko dla siebie. Jeśli jednak chcesz udostępniać dane sesji między różnymi portletami, musisz użyć zakresu globalnej sesji.

8

Właściwie Wiosna pomóc utworzyć sesji zakres fasoli zamiast tradycyjnego sposobu

httpSession.setAttribute("Object",new Object()); 
&& 
httpSession.getAttribute("Object"); 

i wiosna zapewnić to wydajny sposób

@Component 
@Scope("session") 
public class Foo{ 
} 

teraz to ból głowy od wiosny do tworzenia i zniszczyć ten powiązany obiekt sesji przy użyciu Fabrykę Wzór

2

Miałem ten sam problem, użyłem:

@Component 
@Scope("session") 

I to sprawiło, że magia dla mnie:

@Component 
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS) 

Mam nadzieję, że to pomaga ;-)

Powiązane problemy