Wenn Sie absolut sicher sind, dass Ihr wünschen eifrig Initialisierung, können Sie Folgendes tun:
- ein Abfangjäger für alle
Bohnen definieren
DeFina eine <lookup-method>
für die Abfangjäger:
<lookup-method name="getCurrentSessionBean"
bean="yourSessionBeanToInitialize"/>
definieren den Interzeptor abstract
, mit einer abstract
Methode getCurrentSessionBean()
- Erstellen Sie ein Flag
initialized
auf der Bean
- bei jedem Abfangen, rufen Sie die Lookup-Methode und es wird eine Instanz der Bean aus der aktuellen Sitzung zurückgeben. Wenn es nicht initialisiert (die Flagge), initialisieren es
- Sie auch
@PostConstruct
und schonen die initizlied
Flagge
Eine weitere Option verwenden können, ist zu:
- eine
HttpSessionListener
in web.xml definieren (oder mit Anmerkungen bei Verwendung von Servlet 3.0)
- Verwendung
WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext)
dem Kontext zu erhalten
- Anruf
getBean(..)
auf eine Instanz der Session-scoped Bohne zu erhalten
- es wird mit
@PostConstruct
an diesem Punkt
Die erste Option ist „mehr spring“ initialisiert werden, der zweite einfacher und schneller zu implementieren ist.
Wenn diese initialisierten Werte von etwas anderem verwendet werden sollen, ist es sicherlich gut genug, dass sie initialisiert werden, wenn sie das erste Mal referenziert werden? – skaffman
Ich habe eine Bean, die einige benutzerbezogene Werte enthält. Ich möchte hier keine Initialisierungslogik einfügen, da dies eine separate Verantwortung ist. Ich möchte auch nicht den Aufruf der Initialisierungsmethode in Services setzen, die auf diese Session-Bean verweisen. Ich kann keine korrekte Art der Initialisierung auf Referenz sehen – artemb
Können Sie dies in spezifischen Beispielcode ausdrücken, zeigen, wie Sie es gerne arbeiten würde? Ich habe den Verdacht, dass das einfacher ist als Sie denken. – skaffman