@Conditionは、コア春のブート自動化された構成と@ConditionOnBean例えば、新しいSpring4コメント、春ブーツ春豆の容器に注入するための条件を満たしにおける役割、ノート@Condition多くの用途です。出典:
@Target({ElementType.TYPE、ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented 公共の@ インタフェース条件付き{ / ** *すべての{ @link 条件}の{なければならない@linkplain }条件#は試合に一致するには *でコンポーネントの順序を登録します。 * / クラス <?延び条件> )([]の値を、 }
注釈値が条件インターフェース、条件インタフェースソースを達成することです。
パブリック インタフェース条件{ / ** *条件が一致するかどうかを確認します。 * @paramのコンテキスト条件コンテキスト * @paramの{メタデータのメタデータ@link org.springframework.core.type.AnnotationMetadataクラス} *または{ @link org.springframework.core.type.MethodMetadata方法は}確認されます。 * @return { @code 真}条件が一致し、コンポーネントを登録することができれば *または{ @code 偽}は登録を拒否します。 * / ブールマッチ(ConditionContextコンテキスト、AnnotatedTypeMetadataメタデータ)。 }
私たちは、最初のサービス・インターフェースを定義し、コンテナ内のSpring Beanが異なるに登録し、プロファイルの設定に応じて、簡単な例をしました:
パブリック インターフェースProfileServiceに{ ボイドショー(); }
次に実装する2つのクラスを定義します。
パブリック クラス ProfileDevServiceは実装ProfileServiceに{ @Override 公共 ボイドショー(){ System.out.printlnは( "これはDEVです" )。 } }
パブリック クラス ProfilePrdServiceは実装ProfileServiceに{ @Override 公共 ボイドショー(){ System.out.printlnは( "これはPRDです" )。 } }
両方のクラスは唯一の春にウィンドウを登録することができ、この方法は、プロファイル二判定カテゴリを決定することです。
パブリック クラス OnDevProfileは、実装条件{ @Override パブリック ブール{マッチ(ConditionContextコンテキスト、AnnotatedTypeMetadataメタデータ)を 返す)(context.getEnvironmentをgetActiveProfiles()[0] .equals( "DEV"。 )。 } }
パブリック クラス OnPrdProfileが実装条件{ @Override パブリック ブールマッチ(ConditionContextコンテキスト、AnnotatedTypeMetadataメタデータ){ 返す)(context.getEnvironmentをgetActiveProfiles()[0] .equals( "PRD"。 )。 } }
両方のクラスはコメント@Conditionにおける条件インターフェイスを実装するこれら2つのクラスを使用する必要があります。
@Configuration パブリック クラスConditionConfiguration { @Bean @Conditional(OnDevProfile クラス) 公衆ProfileServiceにdevProfileServiceは(){ 戻り 新しい)(ProfileDevServiceします。 } @Bean @Conditional(OnPrdProfile。クラス) パブリックProfileServiceにprdProfileService(){ 戻り 新しい)(ProfilePrdServiceします。 } }
登録が成功したかどうか、matchsメソッド値がクラスのノートに依存し、値を返す@Conditionので、彼は、注入Beanの時に@Conditionコメントを追加しました。
コンテナを起動します。
パブリック 静的 ボイドメイン(文字列[]引数){ AnnotationConfigApplicationContextコンテキスト = 新しいAnnotationConfigApplicationContext()。 。context.getEnvironment()setActiveProfiles( "PRD" )。 context.register(ConditionConfiguration。クラス); context.refresh(); ProfileServiceにProfileServiceに = context.getBean(ProfileServiceにクラス)。 profileService.show(); context.close(); }
「PRD」として、ここでアクティブなプロファイルを設定するためのコンソール印刷がこれですがPRDで、アクティブなプロファイルは、「DEV」の印刷に変更、これはdevのです