ホームページ  >  記事  >  Java  >  SpringBoot の @Conditional アノテーションとは何ですか?使い方?

SpringBoot の @Conditional アノテーションとは何ですか?使い方?

不言
不言オリジナル
2018-09-26 14:36:282848ブラウズ

この記事では、SpringBoot の @Conditional アノテーションとは何ですか?使い方?困っている友人は参考にしていただければ幸いです。

@Conditional アノテーションの一部の機能は最近のプロジェクトで使用されているため、記録するためにこの記事を書きました

@Conditional とは何ですか?

@Conditional アノテーションとは何ですか? たとえば、インターフェースに 2 つの実装クラスがある場合、通常はインターフェースを管理のみに渡します。実装クラスの 1 つが選択されて実装されます。現時点では if-else を使用できないため、@Conditional アノテーションが表示されます。

どうやって使用すればいいですか?

SpringBoot では、@Conditional アノテーションは単独ではなく、ファミリーです。そのメンバーのいくつかとその使用方法を見てみましょう。

@ ConditionalOnBean
サンプルコード

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

このメソッドには @ConditionalOnBean アノテーションが追加されており、アノテーション内の属性は RedisConnectionFactory です。これが意味するのは、redis の関連する構成情報を構成すると、操作できるように RedisTemplate をインスタンス化します。redis の関連する構成を構成しない場合は、(結局のところ、たとえ存在していても) インスタンス化しないということです。設定がない場合、インスタンス化はエラーを報告します)
それだけでなく、次のようにプレイすることもできます:

Bean の名前に従って @ConditionalOnMissingBean(name = “connectionFactory”) または @ConditionalOnMissingBean (annotation = EnableSyjRateLimit.class)、アノテーションなどに基づいてさまざまな操作を実行できます。

  1. @ConditionalOnMissingBean
    これは、Missing が 1 よりも 1 つ多いだけです。これは何を意味しますか。 ? 名前が示すように、特定の Bean が存在しない場合にインスタンス化されます。

  2. @ConditionalOnClass (特定のクラスが存在する場合にのみ Bean がインスタンス化されます)

  3. @ConditionalOnMissingClass (特定のクラスが存在しない場合、Bean はインスタンス化されます)そうして初めて Bean がインスタンス化されます)

  4. @ConditionalOnProperty(prefix = “syj”, name = “algorithm”, gettingValue = “token”)
    これは少し複雑ですこれが意味するのは、構成ファイル内に syj というプレフィックスが付いた属性があり、その属性名が Algorithm であり、その値が Token である場合、クラスがインスタンス化されるということです。

    そして、これにはより優れた属性もあります
    @ConditionalOnProperty(prefix = “syj”, name = “algorithm”, gettingValue = “counter”, matchIfMissing = true)
    matchIfMissing とはどういう意味ですか?つまり、すべてが満たされていない場合は、属性 syj.algorithm が counter

  5. @ConditionalOnJava (Java の場合) に等しいかどうかに関係なく、デフォルトで実装されます。 application)

  6. @ConditionalOnWebApplication (Web アプリケーションの場合)
    実際、@Conditional ファミリのメンバーに関しては、まだほんの一部しか説明していません。

    SpringBoot の @Conditional アノテーションとは何ですか?使い方?子供用の靴について詳しく知りたい場合は、このパッケージを参照してください。
    org.springframework.boot.autoconfigure.condition

上でたくさん話しましたが、まだ満足していません。

なぜ満足していないのですか?実際には、使用していない理由がたくさんあります。 SpringBoot をカスタマイズしたいと考えています。では、この時点で何をカスタマイズしましょうか。

最初にルール クラスをカスタマイズします

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

その後、それを使用できるようになります

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

以上がSpringBoot の @Conditional アノテーションとは何ですか?使い方?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。