@ManagedProperty
e @NoneScoped
proviene dalla specifica JSF 2.0 mentre @Inject
deriva dalle specifiche CDI.
Se si sta solo lavorando su un'applicazione servlet che non fa alcun uso di nessuna delle altre funzionalità di JavaEE 6, andare a @ManagedProperty
. Questa annotazione ha anche un vantaggio rispetto allo @Inject
: con esso è possibile utilizzare EL (linguaggio delle espressioni) (although there are workarounds to get that in CDI).
Entrambe le annotazioni/contenitori sembrano raggiungere "la stessa cosa" ma in modi molto diversi e funzionano con contenitori diversi. I fagioli gestiti da CDI saranno disponibili per JSF ma non viceversa. Se stai annotando i tuoi bean con annotazioni specifiche JSF, dimentica di usare qualificatori, intercettori, metodi di produzione, ecc. Di solito preferisco l'approccio con CDI perché, alla fine, è più sofisticato ma la scelta dipenderà dalle tue reali esigenze .
avvolgendolo, come sembra che si sta solo utilizzando caratteristiche JSF poi bastone alla @ManagedProperty
(CDI non può capire @NoneScoped
annotazioni, nel CDI tutti i fagioli sono nell'ambito di applicazione @Default
se nessuno specificato). Passare a CDI nel progetto potrebbe significare sostituire non solo lo @ManagedProperty
per uno @Inject
, ma tutto il tuo @RequestScoped
(e così via) per quelli specifici del CDI.
fonte
2012-08-31 13:20:21
vorrei aggiungere questo, simile a ciò che è al di sotto, avete cose come EJB è possibile iniettare con CDI. Puoi anche tenerli fuori dalla tua vista se non gli dai un @Name (che li rende semplicemente disponibili a EL). L'uso di CDI offre anche punti di estensione maggiori rispetto a quelli disponibili in JSF, ma ciò non fa parte della domanda :) Suggerisco di attenersi al CDI. – LightGuard