Cela pourrait être une question noob, mais dans de nombreux tutoriels et exemples, j'ai vu ces annotations utilisées comme si elles faisaient la même chose.
Cependant, je suis tombé sur certaines limitations en utilisant le @Named
one (en particulier avec l'injection de dépendances, etc.) Je n'ai pas pu trouver de source où la différence est expliquée et je serais très reconnaissant si quelqu'un pouvait donner un aperçu approximatif du moment d'utiliser l'un ou l'autre.
@Named
donne à un bean géré CDI un nom EL à utiliser dans des technologies d'affichage telles que JSF ou JSP. Notez que dans une application CDI, vous n'avez pas besoin du @Named
annotation pour faire un bean géré par CDI (merci à @Karl pour son commentaire).
@ManagedBean
rend le bean géré par JSF et vous pouvez:
Voir ceci question connexe pour plus d'informations sur le fonctionnement de l'injection entre les deux types de beans.
Notez qu'il existe également une différence avec la portée des beans. Ils proviennent de différents packages mais portent un nom identique (JSF: javax.faces.bean
, CDI: javax.enterprise.context
, c'est donc souvent une source d'erreur et de confusion si vous incluez la mauvaise classe.
D'après mon expérience: vous devez utiliser les beans CDI autant que possible car ils sont plus flexibles que les beans gérés JSF. Le seul inconvénient est que CDI ne connaît pas l'étendue de la vue, vous devez donc revenir à @ManagedBean ou utiliser une extension tierce comme Seam.