ApplicationContextAware多重継承ビーン・インタフェース・アセンブリ

背景問題

  テキストメッセージを送信するために、マルチチャンネルのユーザーの使用が、一つだけの入り口、そして後に放棄または拡張チャネルを、その実装に継承を使用することができます。

  まず、親クラスのいくつかは、特に以下のインタフェースの送信者、送信テキストメッセージやその他の基本的なパブリックメソッドを定義しています。

パブリック インターフェースセンダ{ 

    ボイド送信(); 
}

  次のようにサブクラスとして各チャネルは、送信インタフェース、基本的なメソッドを継承します。

 
 
@Service 
publicクラスBaseSender1は、送信者を実装{ @Override ます。public void センド(){ システム。out.printlnを"BaseSender1.send()" ; } }




@Service 
publicクラスBaseSender2は、送信者を実装{ @Override ます。public void センド(){ システム。out.printlnを"BaseSender2.send()" ; } }





@Service 
publicクラスBaseSender3は、送信者を実装{ @Override ます。public void センド(){ システム。out.printlnを"BaseSender3.send()" ; } }




  テキストメッセージを送信するとき、あなたはテキストメッセージを送信するように選択することから、チャネルのセットを取得する必要があり、ここではApplicationContextAwareは、具体的な実現を見て、使用しています:

@Component 
@ SLF4J 
パブリック クラス SenderUtilは実装ApplicationContextAware { 

    プライベートコレクション<送信者> 送信者を。

    @Override 
    公共 ボイド setApplicationContext(ApplicationContextのApplicationContextの)はスローBeansException { 
        log.info( "ApplicationContextの:{}" 、ApplicationContextのを)。
        送信者 = applicationContext.getBeansOfType(送信者クラス).values(); 
        senders.forEach(送信者::送ります)。
    } 

    パブリックコレクション<送信側> getSenders(){
         戻り送信者と、 
    }
}

  SenderUtil継承ApplicationContextAwareインターフェース、setApplicationContext方法、setApplicationContext方法は、我々は、Senderタイプビーンへのアクセス、およびマップにインスタンス化、取得したマップ値最後トラバーサル送信者サブクラスが設定ApplicationContextのコンテキストを取得します。

実装プロセス

  クラスのインターフェイスは自動的にApplicationContextの注射、起動時にsetApplicationContextメソッドを呼び出し、ApplicationContextAwareのSpringコンテナを実装しました。ApplicationContextAwareクラスは、インターフェイスを使用することができる、容器内に登録する必要が実装@Componentのプロファイルまたは構成に注釈を。ApplicationContextAwareはコンテキストを取得使用する場合は、コードとコードは、現在実行中の春は、同じコンテキストにある、ApplicationContextののGETが空であることを確認する必要があります。

  PS:なぜ使用しないClassPathXmlApplicationContextをそのコンテキストを取得するには、設定ファイルをロードし、これは可能ですが、ApplicationContextのはその1を生成しませSpringコンテナを取得するには、この時点で、冗長性を持つことになりますので、このアプローチを使用しないでください。

  

 

おすすめ

転載: www.cnblogs.com/youtang/p/11520882.html