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.
- 1. Che cos'è un bean CDI?
- 2. ManagedProperty in CDI @Named bean restituisce null
- 3. Iniezione di un bean Spring mediante CDI @Inject
- 4. Come rendere UITabBarController carica pigramente i controller di visualizzazione?
- 5. Quando viene distrutto un bean CDI con scope @Dependent, se si ottiene quel bean tramite Provider.get()?
- 6. Assicurarsi che un bean Spring sia inizializzato correttamente
- 7. injectionPoint.getBean() restituisce null se bean è un bean EJB in Java EE 7 (CDI 1.1)
- 8. @DependsOn è necessario per un altro bean CDI che viene iniettato?
- 9. CDI: utilizzo di Interceptor su diversi moduli/archivi bean
- 10. Inietta bean gestito CDI in Shiro personalizzato AuthorizingRealm
- 11. Iniezione di bean Mockito e CDI, @InjectMocks chiama @PostConstruct?
- 12. @Transactional ignorato nella classe di base del CDI Bean
- 13. Setup pigramente
- 14. CDI dipendenze ambigui
- 15. Iniezione CDI in EntityListeners
- 16. Estensione CDI per Flyway
- 17. CDI - Observing Container Events
- 18. Come creare e distruggere i bean gestiti CDI (Weld) tramite BeanManager?
- 19. CDI SessionScoped Bean ha come risultato due istanze nella stessa sessione
- 20. C'è un modo per leggerlo pigramente?
- 21. Come creare istanze al volo in CDI
- 22. Iniezione di un Logger in un EJB tramite CDI
- 23. Come restituire un elemento web dinamico istanziato pigramente
- 24. Come evitare applicato pigramente Lists.transform in guava?
- 25. cosa usare, fagioli gestiti (backing bean) o bean di entità?
- 26. Come testare l'unità CDI con saldatore?
- 27. In che modo CDI rimuove il bean di sessione con stato?
- 28. Ambiti CDI nell'applicazione non http
- 29. Il bean con scope sessione CDI non distrutto provoca perdite di memoria
- 30. Significato della modalità di rilevamento dei bean annotata in CDI 1.1
Duplicato di http://stackoverflow.com/questions/15920758/java-ee-6-inject-lazy –