Springフレームワークのインターフェースカバー(拡張インタフェース)

  日々の開発では、このようなシナリオの存在は、インタフェースのフレームワークは、デフォルトの実装たAIMP1の種類を提供し、変更のための需要に伴い、今日たAIMP1は、機能的なニーズを満たしていない、そして、私たちはどのように行うことができますか?もちろん、それは第三者それに依存している場合、前記AIMP1の実装コードを変更することですが、?前記AIMP1デフォルトの実装は、このモジュールのための私達に提供し、ユーザーがそれを使用することができますか、我々は機能モジュールの外に書いた、それも行う方法を、要求(または拡張子)でカバーすることができますか?

  この点で、春には、それはこのような問題を解決することができます使用して、私たちに@Conditionalノートを提供しています。

  ここで、例えば。そこRandomGeneratorインタフェース、ランダムな文字列を生成するジェネレータ()メソッドを有するインターフェースと、2つの実装クラスStringRandomGeneratorは、デフォルトの実装であることを特徴とする請求StringRandomGenerator NumberRandomGeneratorがあります。それは、私たちがNumberRandomGeneratorを設定しない場合には、StringRandomGeneratorは、我々はNumberRandomGeneratorを設定したランダムな文字列を生成使用し、NumberRandomGeneratorはランダムな文字列を生成し使用しています。

 

/ ** 
 *トップレベルインターフェースは、ランダムな文字列を生成する
 * / 
パブリック インターフェイスrandomGeneratorを{ 
    ジェネレータ(物体); 
}

 

 

輸入org.apache.commons.lang.RandomStringUtils。

パブリック クラス StringRandomGeneratorは実装RandomGenerator { 
    @Override 
    パブリックオブジェクト生成(){
         CHAR []文字の= { 'A'、 'B'、 'C'、 'D'、 'E'、 'F'、 'G' }。
        ストリングランダム = RandomStringUtils.random(5 、文字)。
        リターン「StringRandomGenerator:」+ ランダム。
    } 
}

 

/ ** 
 * NumberRandomGeneratorがスプリングBeanとして登録され、StringRandomGenerator障害
 *等価ジェネレータ関数ジェネレータNumberRandomGenerator StringRandomGenerator被覆する方法
 * / 
@Component 
パブリック クラスを NumberRandomGenerator 実装randomGenerator { 
    @Override 
    パブリックオブジェクト生成(){ 
        文字列ランダム = RandomStringUtils.random(5。trueにtrueに;)
         リターン "NumberRandomGenerator:" + ランダム; 
    } 
}

 

/ ** 
 *コンフィギュレーションクラス
 * / 
@SpringBootConfiguration 
パブリック クラスRandomGeneratorConfig { 

    / ** 
     * @ConditionalOnMissingBean(= RandomGenerator.class値)
     *注釈手段:コンテナは、ビーン型IocをRandomGeneratorない場合
     * StringRandomGeneratorに登録しますIOCコンテナ
     * / 
    @Bean 
    @ConditionalOnMissingBean(値 randomGenerator = クラスパブリックrandomGenerator stringRandomGenerator(){
         戻り 新しい新しいstringRandomGeneratorを(); 
    } 
}

 

最後に、テストコントローラを書きます

@RestController
 パブリック クラスRandomController { 
    @Autowired 
    プライベートRandomGenerator randomGenerator。

    @GetMapping( "/ランダム" 公衆ランダムオブジェクト(){
         戻り)(randomGenerator.generatorします。
    } 
}

 

次のように登録されNumberRandomGenerator IoCコンテナ場合、試験結果は次のとおりです。

 

次に、我々はテスト、その後、殺す@Component NumberRandomGeneratorクラスにコメントします

 

 

 

パーフェクト!

 

おすすめ

転載: www.cnblogs.com/z-qinfeng/p/11785553.html