J'essaie de comprendre comment les beans que nous fabriquons avec @Configuration ont tendance à remplacer les beans générés par SpringBoot par défaut. J'ai travaillé sur un projet dans lequel, dans de nombreux cas, nous créons des beans pour des choses comme ZuulConfigs et l'hypothèse est que, quoi que nous fassions, la priorité sera celle sur le bean généré par défaut. J'ai essayé de comprendre cela mais je ne peux pas. Fondamentalement,
L'aide est très appréciée
Spring AutoConfiguration est utilisé pour fournir une configuration de base si certaines classes sont dans le classpath ou non.
Si vous voulez configurer l’ordre dans lequel les beans sont instanciés au printemps, vous pouvez utiliser
@DependsOn("A")
public class B {
...
}
Cela créerait le haricot "A", puis "B". Par conséquent, vous pouvez commander la configuration en fonction des besoins en beans. Anyways Spring détecte automatiquement les dépendances en analysant les classes de bean . Pour plus d’aide, consultez cette question Ordre de configuration automatique de démarrage de printemps
Alternative: Il existe également une annotation "@AutoConfigureOrder" (où vous pouvez hiérarchiser la configuration), vous pouvez consulter le code pour une meilleure compréhension.
La documentation de la configuration automatique est here
Tout d’abord, le chargement des classes et la création de beans sont deux choses différentes. Nous n'avons pas besoin de créer un bean pour charger une classe, cependant, une classe doit être chargée pour créer un bean.
Revenons maintenant à l'exemple de Spring. Spring examine tous les packages configurés par @componentScan
et crée des beans de toutes les classes annotées avec @Bean
, @Configuration
et/ou @Component
. Le conteneur de Spring garde la trace de tous les beans créés et par conséquent, lorsqu'il rencontre un bean défini par l'utilisateur avec le même nom et le même type de classe que le bean par défaut, il remplace la définition d'origine par celle définie par l'utilisateur (par exemple, nous pouvons créer notre @ObjectMapper
personnalisé pour remplacer le propre exemple). Vous pouvez également utiliser l'annotation @Primary
pour que votre bean soit prioritaire s'il existe une autre définition avec la même classe (documentation ici ).
Voici les réponses à vos questions:
@Configuration
.@Primary
pour donner la priorité à votre bean. Vous pouvez également utiliser @Order
( here ) pour définir l’ordre de création de vos beans.@Primary
, @Order
et @Qualifier
annotation vous pouvez définir votre propre hiérarchie pour la création de beans.Sachez simplement ceci: les classes de configuration automatique Spring Boot (en particulier) sont toujours configurées last. Une fois que tous les beans utilisateur ont été créés. Les classes de configuration automatique Spring Boot utilisent presque toujours les annotations @ConditionalXXXX
pour s'assurer que tous les beans du même type/nom et les autres conditions configurées dans votre application auront priorité sur les beans Spring Boot configurés automatiquement .
Si vous souhaitez que votre @Component ait priorité sur un autre @Component lors de l'analyse de tous les composants au printemps, utilisez @Order (Ordered.LOWEST_PRECEDENCE), c'est-à-dire la valeur maximale pour charger votre composant par-dessus un autre.
@Primary est utilisé pour donner à votre bean une préférence par défaut, nous pouvons remplacer la préférence par défaut en utilisant @Qualifier