@ManagedProperty
y @NoneScoped
viene de la especificación JSF 2.0, mientras que @Inject
viene de la especificación CDI.
Si solo está trabajando en una aplicación de servlet que no utiliza ninguna de las otras características de JavaEE 6, vaya a @ManagedProperty
. Esa anotación también tiene una ventaja contra @Inject
: puede usar EL (lenguaje de expresión) con ella (although there are workarounds to get that in CDI).
Ambas anotaciones/contenedores parecen lograr "lo mismo" pero de maneras muy diferentes y funcionan con contenedores diferentes. Los frijoles manejados por CDI estarán disponibles para JSF pero no viceversa. Si anota sus beans con anotaciones específicas de JSF, entonces olvídese de usar calificadores personalizados, interceptores, métodos de productor, etc. Por lo general, prefiero el enfoque con CDI porque, al final, es más sofisticado, pero la elección dependerá de sus necesidades reales. .
envolviéndolo, ya que parece que usted está usando características JSF continuación palo al @ManagedProperty
(CDI no puede entender @NoneScoped
anotaciones, en CDI todos los granos están bajo el alcance @Default
si no se especifica ninguno). Cambiar a CDI en su proyecto puede significar reemplazar no solo el @ManagedProperty
por uno @Inject
, sino todos sus @RequestScoped
(y así sucesivamente) para los CDI-específicos.
yo añadiría esto, similar a lo que está por debajo, que tienen cosas como EJB se puede inyectar con CDI. También puede mantenerlos fuera de su vista si no les da un @Name (que simplemente los pone a disposición de EL). Usar CDI también le da puntos de extensión mayores que los disponibles en JSF, pero eso no forma parte de la pregunta :) Sugiero seguir con CDI. – LightGuard