Le contenu de cet article porte sur ce qu'est l'annotation @Conditional dans SpringBoot ? Comment l'utiliser ? Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.
Certaines fonctionnalités de l'annotation @Conditional ont été utilisées dans des projets récents, j'ai donc écrit cet article pour l'enregistrer
Qu'est-ce que l'annotation @Conditional ? Elle peut charger différents beans selon les conditions définies dans le code. Par exemple, lorsqu'une interface a deux classes d'implémentation, nous confions généralement l'interface à Spring uniquement pour la gestion. l'une des classes d'implémentation sera choisie à implémenter. Nous ne pouvons pas utiliser if-else pour le moment, donc l'annotation @Conditional apparaît.
Dans SpringBoot, les annotations @Conditional ne fonctionnent pas seules. Elles forment une famille. Jetons un coup d'œil à plusieurs de leurs membres et à la façon dont elles sont utilisées
@ ConditionalOnBean.
Exemple de code
@Bean @ConditionalOnBean(RedisConnectionFactory.class) public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate<Object, Object> template = new RedisTemplate<Object, Object>(); template.setConnectionFactory(connectionFactory); template.setKeySerializer(new StringRedisSerializer()); template.afterPropertiesSet(); return template; }
Cette méthode a l'annotation @ConditionalOnBean ajoutée et l'attribut dans l'annotation est RedisConnectionFactory. Cela signifie que si vous configurez les informations de configuration pertinentes de Redis, alors j'instancierai le RedisTemplate pour que vous puissiez l'utiliser. Si vous ne configurez pas la configuration appropriée de Redis, je ne l'instancierai pas (après tout, même s'il existe). n'y a pas de configuration, l'instanciation signalera une erreur. )
Non seulement cela, vous pouvez également jouer comme ceci :
Selon le nom du bean @ConditionalOnMissingBean(name = « connectionFactory ») ou @ConditionalOnMissingBean (annotation = EnableSyjRateLimit.class), vous pouvez effectuer diverses opérations basées sur des annotations et ainsi de suite
@ConditionalOnMissingBean
C'est juste un manquant de plus que 1. Qu'est-ce que cela signifie. ? Comme son nom l'indique, il est instancié lorsqu'un certain bean n'existe pas.
@ConditionalOnClass (un Bean sera instancié uniquement lorsqu'une certaine classe existe)
@ConditionalOnMissingClass (quand une certaine classe n'existe pas, Un Bean sera instancié)
@ConditionalOnProperty(prefix = “syj”, name = “algorithm”, haveValue = “token”)
C'est un peu plus compliqué. cela signifie que lorsqu'il y a un attribut préfixé par syj dans le fichier de configuration, le nom de l'attribut est algorithm, puis sa valeur est token, une classe sera instanciée.
Et celui-ci a aussi un meilleur attribut
@ConditionalOnProperty(prefix = “syj”, name = “algorithm”, haveValue = “counter”, matchIfMissing = true)
Que signifie matchIfMissing ? C'est-à-dire que si tout le monde n'est pas satisfait, il sera implémenté par défaut, que cet attribut syj.algorithm soit égal ou non à counter
@ConditionalOnJava (s'il s'agit d'un Java application)
@ConditionalOnWebApplication (s'il s'agit d'une application Web)
En fait, lorsqu'il s'agit des membres de la famille @Conditional, nous n'avons parlé que d'une petite partie de eux
Il compte à peu près autant de membres de la famille :
Les chaussures pour enfants qui souhaitent en savoir plus peuvent se référer à ce package
org.springframework.boot.autoconfigure.condition
Pourquoi n'êtes-vous pas satisfait Il y a en fait de nombreuses raisons. Par exemple, vous n'avez pas utilisé SpringBoot, et vous. souhaitez le personnaliser. Alors que devrions-nous faire à ce moment-là ?
Personnalisez d'abord une classe de règles
public class MyCondition implements Condition { public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { //在这里写你的逻辑,比如说你想a>0时实例化类A,a<0时不实现 return a>0; } }
Ensuite, vous pouvez l'utiliser
@Bean @Conditional(MyCondition.class) public A a(){ return new A() }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!