134 votes

Lorsqu'on annote une classe avec @Component, cela signifie-t-il que c'est un Spring Bean et un Singleton ?

Étant relativement nouveau dans Spring, j'ai une question sur l'annotation d'une classe. Lorsque l'on annote une classe avec @Component Cela signifie-t-il que cette classe sera un Spring Bean et par défaut un singleton ?

163voto

Bozho Points 273663

Oui, c'est exact, @Component est un Spring bean et un Singleton.

Si la classe appartient à la couche service, vous pouvez l'annoter avec @Service au lieu de

Mais gardez à l'esprit que pour que ces annotations soient détectées, vous devez placer cette ligne dans le fichier applicationContext.xml :

<context:component-scan base-package="com.yourcompany" />

À propos des singletons - les beans de Spring sont tous dans une portée singleton par défaut. La seule chose que vous devez avoir à l'esprit est que vous ne devez pas stocker l'état dans les variables de champ (elles ne doivent contenir que les dépendances). Ainsi, votre application sera thread-safe, et vous n'aurez pas besoin d'une nouvelle instance d'un bean à chaque fois. En d'autres termes, vos beans sont sans état.

37voto

Lea Zus Points 361

Par défaut - Oui.

Toutefois, vous pouvez modifier ce comportement en utilisant l'option @Scope annotation. Par exemple : @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

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