Spring-Proxy-Bean
Kann jemand erklären, die Verwendung der Feder @ScopedProxy
annotation? Ich dachte es hatte etwas zu tun mit session-scoped beans, aber ich bin mir nicht ganz sicher, was.
In meiner Nutzung Bereiche, die ich verwendet habe, session-scoped beans ohne die @ScopedProxy
annotation (oder ohne aop Gültigkeitsbereich proxies), so bin ich wirklich sicher, wie um es richtig zu nutzen.
InformationsquelleAutor der Frage Jeff Storey | 2013-01-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Abschnitt 3.4.4.5 der Feder docs erklärt es ziemlich gut:
(bitte beachten Sie, dass die folgenden 'userPreferences' bean-definition, so wie es da steht ist unvollständig):
Aus der oben beschriebenen Konfiguration ist es offensichtlich, dass die singleton-bean 'userManager' eingespritzt wird mit einem Verweis auf die HTTP-Session-scoped bean 'userPreferences'. Der springende Punkt ist hier, dass die 'userManager' bean ist ein singleton... es wird instanziiert genau einmal pro containerund Ihre Abhängigkeiten (in diesem Fall nur einer, der 'userPreferences' bean) auch nur gespritzt werden (einmal!).
Dies bedeutet, dass die 'userManager' (begrifflich) immer nur funktionieren auf die exakt gleiche 'userPreferences' - Objekt, das ist die eine, die Sie ursprünglich injiziert.
Dies ist nicht das, was Sie wollen, wenn Sie sich Spritzen, ein HTTP-Session-scoped bean mit einer Abhängigkeit, die in einem kollaborierenden Objekt (in der Regel). Vielmehrwas wir tun wollen, ist ein einfaches 'userManager' Objekt pro containerund dann, für die Lebensdauer einer HTTP-Sitzung, die wir sehen wollen, und verwenden Sie eine 'userPreferences' - Objekt, das eine spezifische, sagte die HTTP-Sitzung.
Eher das, was Sie brauchen, dann wird Spritzen einige Art von Objekt, das verfügbar macht, die genau die gleiche öffentliche Schnittstelle wie die UserPreferences-Klasse (im Idealfall ein Objekt, das eine UserPreferences-Instanz) und ist smart genug, um in der Lage zu gehen und Holen Sie sich das echte UserPreferences Objekt aus, was auch immer zugrunde liegenden scoping-Mechanismus ist, den wir gewählt haben (HTTP-request, Session, etc.). Wir können dann gefahrlos injizieren dieses proxy-Objekt in der 'userManager' bean, der wird selig nicht bewusst, dass die UserPreferences Hinweis, dass es hält, auf eine proxy.
In unserem Fall, wenn ein UserManager-Instanz ruft eine Methode auf die Abhängigkeit injiziert UserPreferences Objekt, wird es wirklich einen Methodenaufruf auf dem proxy... der proxy dann gehen Sie aus und Holen Sie sich das echte UserPreferences Objekt aus (in diesem Fall) die HTTP-Sitzung und delegiert den Methodenaufruf auf den abgerufenen real UserPreferences Objekt.
Das ist, warum Sie benötigen das folgende, korrekt und vollständig sind, - Konfiguration, wenn die Injektion von request-, session-, und globalSession-scoped beans in Zusammenarbeit Objekte:
InformationsquelleAutor der Antwort Gus