Spring @Autowired Verwirrung (Container oder Sitzung)

8

In meiner App verwende ich eine User -Bohne, die mit meinem Dienst MyService automatisch verbunden ist und die als Hauptbenutzerinfo verwendet wird (der Benutzer kommt also nicht als statische Bean aus einem XML, sondern wird dynamisch generiert von einem angemeldeten Benutzer) Wenn zehn Benutzer eingeloggt sind, habe ich zehn Kandidaten für das Feld @AutoWired User . (richtig?) und ich kann einen von ihnen bekommen, weil AutoWired im Frühlingsbehälter und nicht Sitzung schaut.

Sag mir, wenn ich falsch liege. und wie man es wenn möglich löst. Was aber, wenn mein AutoWired-Feld mit @Scope ("Session")

versehen ist?

So:

%Vor% %Vor%

Ist es möglich, die User-Bean eines anderen Benutzers zu erhalten, wenn ich meine MyService -Komponente aufruft? Cos MyService ist nur @Component , obwohl User @Scope(session) ist.

Grundsätzlich, (wenn ich falsch in meiner Annahme bin) denke ich, dass, wenn Sie ein Feld @Autowire , es sieht in den Container als Ganzes und der Container ist nicht in Untercontainer pro Sitzung unterteilt.

    
sarmahdi 15.01.2012, 12:15
quelle

2 Antworten

12

Wenn Sie User mit @Scope("session") und dann @Autowire mit einer anderen nicht-bereichsabhängigen Komponente annotieren, erzeugt Spring einen Proxy, der zwischen MyService und User liegt. Dieser Proxy sucht die User der aktuellen Sitzung und delegiert alle Aufrufe von MyService an den Proxy an die sitzungsspezifische User .

Es ist vollkommen sicher, dass die MyService -Komponente nur Zugriff auf User von der aktuellen Sitzung hat.

Wenn die Proxy-Verarbeitung nicht stattgefunden hat, konnte der Container nicht gestartet werden, da Sie eine session-scope-Bean nicht direkt in eine single-scope Bean injizieren können.

    
skaffman 15.01.2012, 12:19
quelle
12

Spring würde nicht automatisch einen Proxy erstellen. Sie müssen Ihre Bereichsanmerkung in das folgende

ändern %Vor%

Dies würde sicherstellen, dass wenn die Session-Bean in einer Singleton-Klasse autowired wird, ein Proxy um die Bean herum erstellt wird, die dafür verantwortlich sein würde, die Bean aus der Session zu holen.

    
prashant 26.10.2013 20:07
quelle