gpt4 book ai didi

java - 注入(inject)具有特定接口(interface)的所有 bean 列表

转载 作者:行者123 更新时间:2023-12-01 10:56:44 28 4
gpt4 key购买 nike

我有一个看起来像这样的类(@Component bean):

@Component
public class EntityCleaner {

@Autowired
private List<Cleaner> cleaners;

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

Cleaner 是一个界面,我有一些清洁器,我希望它们都运行(不要介意顺序)。今天我做了这样的事情:
 @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;
}
}

有没有办法在不定义配置中的特殊方法的情况下构造这个列表?只是那个 Spring 自动神奇地找到所有那些实现 Cleaner的类。接口(interface),创建列表并将其注入(inject) EntityCleaner ?

最佳答案

@Autowired 的 Javadoc说:

In case of a Collection or Map dependency type, the container autowires all beans matching the declared value type.



因此,您可以执行以下操作:
@Component
public class SomeComponent {

interface SomeInterface {

}

@Component
static class Impl1 implements SomeInterface {

}

@Component
static class Impl2 implements SomeInterface {

}

@Autowired
private List<SomeInterface> listOfImpls;
}

关于java - 注入(inject)具有特定接口(interface)的所有 bean 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53579112/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com