春@Conditionは説明する例を注釈付き

@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のです

おすすめ

転載: www.cnblogs.com/c04s31602/p/11210892.html
おすすめ