Maison >Java >javaDidacticiel >Qu'est-ce que l'annotation @Conditional dans SpringBoot ? Comment l'utiliser ?

Qu'est-ce que l'annotation @Conditional dans SpringBoot ? Comment l'utiliser ?

不言
不言original
2018-09-26 14:36:282904parcourir

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 @Conditional ?

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.

Comment l'utiliser ?

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

  1. @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.

  2. @ConditionalOnClass (un Bean sera instancié uniquement lorsqu'une certaine classe existe)

  3. @ConditionalOnMissingClass (quand une certaine classe n'existe pas, Un Bean sera instancié)

  4. @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

  5. @ConditionalOnJava (s'il s'agit d'un Java application)

  6. @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 :
    Quest-ce que lannotation @Conditional dans SpringBoot ? Comment lutiliser ?
    Les chaussures pour enfants qui souhaitent en savoir plus peuvent se référer à ce package
    org.springframework.boot.autoconfigure.condition

Bien que vous en ayez dit beaucoup ci-dessus, je ne suis toujours pas satisfait

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn