アビ:
私はクラス(持っている@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;
}