Heim  >  Artikel  >  Java  >  Was ist die @Conditional-Annotation in SpringBoot? Wie benutzt man es?

Was ist die @Conditional-Annotation in SpringBoot? Wie benutzt man es?

不言
不言Original
2018-09-26 14:36:282848Durchsuche

Der Inhalt dieses Artikels befasst sich mit der Frage, was die @Conditional-Annotation in SpringBoot ist. Wie benutzt man es? Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird Ihnen hilfreich sein.

Einige Funktionen der @Conditional-Annotation wurden in jüngsten Projekten verwendet, daher habe ich diesen Artikel geschrieben, um sie aufzuzeichnen

Was ist @Conditional?

Was ist die @Conditional-Annotation? Sie kann je nach den im Code festgelegten Bedingungen unterschiedliche Beans laden. Wenn eine Schnittstelle beispielsweise zwei Implementierungsklassen hat, übergeben wir die Schnittstelle normalerweise nur zur Verwaltung Eine der Implementierungsklassen wird zur Implementierung ausgewählt. Da wir „if-else“ derzeit nicht verwenden können, wird die Annotation „@Conditional“ angezeigt.

Wie verwende ich es?

In SpringBoot funktionieren @Conditional-Anmerkungen nicht allein. Sie sind eine Familie und wie sie verwendet werden

@ConditionalOnBean
Beispielcode

@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;
   }

Dieser Methode wurde die Annotation @ConditionalOnBean hinzugefügt, und das Attribut in der Annotation ist RedisConnectionFactory. Das bedeutet, dass ich, wenn Sie die relevanten Konfigurationsinformationen von Redis konfigurieren, die RedisTemplate für Sie instanziieren werde. Wenn Sie die relevanten Konfigurationsinformationen von Redis nicht konfigurieren, werde ich sie schließlich nicht instanziieren )
Darüber hinaus können Sie auch so spielen:

Je nach Name der Bean, @ConditionalOnMissingBean(name = „connectionFactory“) oder @ ConditionalOnMissingBean(annotation = EnableSyjRateLimit.class), Sie können verschiedene Operationen basierend auf Anmerkungen usw. ausführen

  1. @ConditionalOnMissingBean
    Dies ist nur ein Missing mehr als 1. Was bedeutet das? bedeuten? Wie der Name schon sagt, wird es instanziiert, wenn eine bestimmte Bean nicht existiert.

  2. @ConditionalOnClass (eine Bean wird nur instanziiert, wenn eine bestimmte Klasse existiert)

  3. @ConditionalOnMissingClass (wenn eine bestimmte Klasse nicht existiert, Eine Bean wird instanziiert)

  4. @ConditionalOnProperty(prefix = „syj“, name = „algorithm“, gettingValue = „token“)
    Das ist etwas komplizierter Dies bedeutet, dass eine Klasse instanziiert wird, wenn in der Konfigurationsdatei ein Attribut mit dem Präfix syj vorhanden ist, der Attributname „Algorithmus“ und sein Wert „Token“ lautet.

    Und dieses hat auch ein besseres Attribut
    @ConditionalOnProperty(prefix = „syj“, name = „algorithm“, gettingValue = „counter“, matchIfMissing = true)
    Was bedeutet matchIfMissing? Das heißt, wenn nicht alle erfüllt sind, wird es standardmäßig implementiert, unabhängig davon, ob dieses Attribut syj.algorithm gleich counter

  5. @ConditionalOnJava ist (wenn es sich um ein Java handelt). application)

  6. @ConditionalOnWebApplication (wenn es sich um eine Webanwendung handelt)
    Eigentlich haben wir, wenn es um die Mitglieder der @Conditional-Familie geht, nur über einen kleinen Teil davon gesprochen sie
    Es hat ungefähr so ​​viele Familienmitglieder:
    Was ist die @Conditional-Annotation in SpringBoot? Wie benutzt man es?
    Kinderschuhe, die mehr darüber wissen wollen, können sich auf dieses Paket beziehen
    org.springframework.boot.autoconfigure.condition

Obwohl Sie oben viel geredet haben, bin ich immer noch nicht zufrieden

Warum sind Sie tatsächlich nicht zufrieden? Zum Beispiel haben Sie SpringBoot nicht verwendet und möchten um es anzupassen. Was sollen wir jetzt also tun?

Passen Sie zuerst eine Regelklasse an

public class MyCondition implements Condition    
{    
      
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata)    
    {    
    		//在这里写你的逻辑,比如说你想a>0时实例化类A,a<0时不实现
        return a>0;    
    }    
}

Dann können Sie sie verwenden

@Bean
    @Conditional(MyCondition.class)
    public A a(){
    	return new A()
    }

Das obige ist der detaillierte Inhalt vonWas ist die @Conditional-Annotation in SpringBoot? Wie benutzt man es?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn