Se si è assolutamente certi che il vostro voglia di inizializzazione ansioso, è possibile effettuare le seguenti operazioni:
- definiscono un intercettore per tutti i fagioli
Defina un <lookup-method>
per questo intercettore:
<lookup-method name="getCurrentSessionBean"
bean="yourSessionBeanToInitialize"/>
definire l'intercettore abstract
, con un metodo abstract
getCurrentSessionBean()
- creare una bandiera
initialized
sul fagiolo
- su ogni intercettazione, chiamare il metodo di ricerca e tornerà un'istanza del bean dalla sessione corrente. Se non è inizializzata (la bandiera), inizializzare
- è anche possibile utilizzare
@PostConstruct
e risparmiare il initizlied
bandiera
Un'altra opzione è quella di:
- definire una
HttpSessionListener
in web.xml (o con le annotazioni se si utilizza servlet 3.0)
- uso
WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext)
per ottenere contesto
- chiamata
getBean(..)
per ottenere un'istanza del bean di sessione con ambito
- verrà inizializzato con
@PostConstruct
a quel punto
La prima opzione è "più a molla", il secondo è più facile e veloce da implementare.
Se quei valori inizializzati devono essere usati da qualcos'altro, sicuramente è abbastanza buono averli inizializzati la prima volta che vengono referenziati? – skaffman
Ho un bean che contiene alcuni valori relativi alla sessione dell'utente. Non voglio mettere la logica di inizializzazione in quella perché è una responsabilità separata. Nemmeno voglio mettere l'invocazione del metodo di inizializzazione nei servizi che fanno riferimento a quel bean di sessione. Non riesco a vedere un modo corretto di inizializzazione sul riferimento – artemb
Puoi spiegarlo in un codice di esempio specifico, mostrando come desideri che funzioni? Ho il sospetto che sia piuttosto semplice di quanto pensi. – skaffman