118 votes

Quelle est la différence entre les scopes @ApplicationScoped et @Singleton en CDI ?

Dans le CDI, il y a le @ApplicationScoped et le ( javax.inject ) @Singleton pseudo-scope. Quelle est la différence entre eux ? Outre le fait que @ApplicationScoped est procuré, et @Singleton ne l'est pas.

Est-ce que je peux juste changer mon @Singleton haricot à @ApplicationScoped ? Est-ce que @ApplicationScoped bean a deux (ou plus) instances ?

12 votes

Avez-vous lu le Référence de la soudure ? Il y a quelques explications sur les différences pratiques entre @ApplicationScoped et @Singleton à sa section 5.4 (p. 36).

3 votes

A quelle portée de Singleton faites-vous référence - javax.ejb ou javax.inject ?

3voto

user1017344 Points 31

Une des différences majeures est que vous pouvez écrire votre classe avec le constructeur par défaut a un modificateur d'accès privé lorsque vous utilisez javax.inject.Singleton mais votre classe doit avoir un constructeur par défaut avec au moins un modificateur d'accès par défaut lorsque vous utilisez la fonction javax.enterprise.context.ApplicationScoped et ceci est JBOSS 6.1 GA Final mise en œuvre

0 votes

Voulez-vous dire "constructeur par défaut" ?

0voto

edmangini76 Points 11

Je sais que c'est un vieux post, mais c'est une question que l'on me pose assez souvent.

IMHO, allez à la source -> https://www.javadoc.io/doc/jakarta.enterprise/jakarta.enterprise.cdi-api/latest/jakarta/enterprise/context/ApplicationScoped.html

https://www.javadoc.io/doc/jakarta.inject/jakarta.inject-api/latest/jakarta/inject/Singleton.html

https://quarkus.io/guides/cdi-reference#lazy_by_default fournit une bonne référence qui compare les deux en termes d'utilisation pratique.

(Il est également utile de noter que dans ce dernier cas, Quarkus crée le constructeur no-args pour vous afin de répondre aux exigences des haricots CDI, de sorte que vous n'avez pas besoin de le bricoler ou de le lombok-er).

1 votes

Une "liste de liens" est déconseillée en tant que réponse - non pas que vous ne puissiez pas inclure des liens, mais vous devriez inclure votre propre explication (qui s'appuie sur les informations de ces liens, éventuellement) dans votre réponse.

0 votes

Compris. Désolé pour ça. Je fais une note pour mettre à jour.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X