特定のインターフェイスを持つすべてのBeanの噴出リスト

アビ:

私はクラス(持っている@ComponentことのようになりますBeanを):

@Component
public class EntityCleaner {

    @Autowired
    private List<Cleaner> cleaners;

    public void clean(Entity entity) {
         for (Cleaner cleaner: cleaners) {
             cleaner.clean(entity);
         }
    }
}

クリーナーはインタフェースであり、私はそれらのすべてが(順番を気にしない)実行したいいくつかのクリーナーを持っています。今日、私はそのような何かを実行します。

 @Configuration
 public class MyConfiguration {
     @Bean
     public List<Cleaner> businessEntityCleaner() {
         List<Cleaner> cleaners = new ArrayList<>();
         cleaners.add(new Cleaner1());
         cleaners.add(new Cleaner2());
         cleaners.add(new Cleaner3());
         // ... More cleaners here

         return cleaners;
     }
 }

コンフィギュレーションで特別なメソッドを定義せずにこのリストを構築する方法はありますか?春には、自動魔法のようにすべてのそれらのクラスが実装を見つけるだけではCleaner、インタフェースをリストを作成し、それを注入しますかEntityCleaner

アレクサンドルSemyannikov:

Javadocは@Autowired言います:

コレクションや地図依存型の場合、コンテナは、宣言された値のタイプに一致するすべてのBeanをautowires。

このように、あなたのような何かを行うことができます:

@Component
public class SomeComponent {

    interface SomeInterface {

    }

    @Component
    static class Impl1 implements SomeInterface {

    }

    @Component
    static class Impl2 implements SomeInterface {

    }

    @Autowired
    private List<SomeInterface> listOfImpls;
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=184384&siteId=1