Sto usando l'implementazione Weld di CDI 1.0 e non riesco a trovare il modo in cui rendere il bean pigro come in Spring (usando @Lazy
o lazy-init
in XML). C'è un modo per dire a CDI di Injector
di non inizializzare bean all'avvio?Come rendere pigramente inizializzato un bean CDI?
risposta
No, questo non è possibile in CDI. La cosa più vicina che si potrebbe ottenere sarebbe quella di creare una nuova implementazione di InjectionPoint (usando un'estensione) che fornisce un proxy e il proxy inizializzerà tutto sul primo richiamo del metodo.
Quindi, utilizzando l'istanza @Inject
Um, la mia prima reazione è di dire che potrebbe funzionare. Anche se si sta utilizzando un'istanza di implementazione di CDI 1.0, la memoria di perdite delle istanze con scope dipendenti viene perduta. – LightGuard
Di quale implementazione stai parlando? dov'è il tuo riferimento? –
Vedere la mia risposta su: http://www.adam-bien.com/roller/abien/entry/lazy_injection_with_javax_inject
Utilizzando
@Inject
Instance<MyObject> object;
il fagiolo viene inizializzato solo quando necessario ... non è che ciò che si vuole?
[secondo Adam Bien] (http://www.adam-bien.com/roller/abien/entry), c'è un'alternativa a questo che potrebbe essere un po 'più leggero: semplicemente iniettando un 'Provider >' invece di un' Istanza > ', tutto il resto è lo stesso. –
@Hein Blöd Il collegamento alla voce nel blog di Adam Bien è stato modificato in [Lazy Injection con javax.inject.Provider] (http://www.adam-bien.com/roller/abien/entry/lazy_injection_with_javax_inject). – ltlBeBoy
ha aggiornato la risposta, grazie –
Se il bean che si sta iniettando si trova in un ambito normale (@SessionScoped, @RequestScoped ecc.), Verrà istanziato pigramente. Quello che ottieni nel tuo client bean è un proxy che non punta a un'istanza concreta fino alla prima volta che invochi un metodo sul proxy.
Come altri hanno già indicato, @Inject Instance<MyBean> myBeanInstance;
può anche essere utilizzato per stabilire un'istanza lazy esplicita.
Duplicato di http://stackoverflow.com/questions/15920758/java-ee-6-inject-lazy –