web-dev-qa-db-fra.com

Pourquoi y a-t-il différentes annotations de gestion de bean

Quelle est la différence entre

import javax.annotation.ManagedBean;
import javax.enterprise.context.SessionScoped;

et

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

?

39
Koray Tugay
  1. javax.enterprise.context.SessionScoped ( JSR 346 ) et toutes les autres annotations sous javax.enterprise.context.* le paquet maintient le contexte de CDI . CDI fournit un mécanisme alternatif, polyvalent et plus puissant pour l'injection de dépendances, le bean et la gestion générale des ressources dans l'espace Java EE. C'est une alternative aux beans gérés JSF et il est même prévu de remplacer le bean JSF mécanisme de gestion dans le version à venir de JSF .

    Actuellement, les beans annotés JSF et CDI sont interchangeables dans n'importe quelle application Web Java EE) (compte tenu de quelques restrictions mineures). Les beans annotés CDI, cependant, s'étendent bien au-delà du domaine du niveau Web, qui C'est pourquoi la spécification Java EE évolue pour faire de CDI le bean standard et le mécanisme DI.

    Bien que CDI puisse être un choix évident pour tous Java EE, les beans gérés JSF sont portables sur les conteneurs de servlets (Tomcat) et les serveurs d'applications (Glassfish, JBoss, etc.). Les beans CDI peuvent vivre dans uniquement des serveurs d'applications complets. Avec certains travaux cependant, Tomcat 7 peut être câblé pour prendre en charge CDI.

    Plus précisément, javax.enterprise.context.SessionScoped est l'implémentation parallèle de la portée de session JSF au sein du CDI.

  2. javax.faces.bean.SessionScoped ( JSR 314 ) et toutes les autres annotations sous javax.faces.bean.* package gère le mécanisme d'injection de dépendances et de gestion des beans spécifique à JSF. Les beans annotés avec des annotations JSF ne sont cependant utiles que dans le niveau Web. Toutes les étendues disponibles avec les annotations JSF ont été répliquées dans la spécification CDI.

  3. javax.annotation.ManagedBean ( JSR 316 ) et autres annotations liées à DI sous javax.annotation.* sont une tentative de généraliser les annotations basées sur JSF pour d'autres utilisations dans la spécification Java EE et ne devraient vraiment pas être utilisées par le développeur final.

Pourquoi existent-ils? Eh bien IMO, le passage des beans JSF aux beans CDI est une évolution naturelle de la technologie. Les haricots JSF ont bien fonctionné, mais Spring, Guice et Seam ont montré que la technologie n'était pas suffisante. Il était également nécessaire de combler l'écart entre les composants Web et les EJB, et la réponse à ce besoin est CDI.

Voir aussi ces questions connexes:

49
kolossus