spring - Spring Boot——不同bean实现的自动装配接口
问题描述
我有多个带有@Component 实现通用接口的bean。
我有一堂课,我在其中使用这些 bean 中的方法。我没有单独自动装配每个 bean,而是想办法将接口自动装配为一个列表。
但是当我只是自动装配接口时,如何调用不同bean的方法。
public interface Generic {
}
@Component
public class A implements Generic{
.....
public void test{
}
}
@Component
public class B implements Generic{
.....
public void read{}
}
@component class C {
@Autowired
List <Generic> mylist; // type of list is Generic
现在我需要从 B 访问读取并从 A 测试
解决方案
对于您的新问题,您可以这样做,但我认为最好使用 2 个单独的列表而不是 instanceOf。
public interface Generic { }
public interface GenericTestable extends Generic {
void test()
}
public interface GenericReader extends Generic {
void read()
}
@Component
public class A implements GenericTestable {
public void test() { }
}
@Component
public class B implements GenericReader {
public void read() { }
}
@Component
public class C {
private final List<Generic> genericItems;
@Autowired
public C(List<Generic> genericItems) {
this.genericItems = genericItems;
}
public void callThem() {
this.genericItems.forEach(this::callMethodOnSpecificType);
}
private void callMethodOnSpecificType(Generic genericItem) {
if (genericItem instanceof GenericTestable) {
((GenericTestable) genericItem).test();
} else if (genericItem instanceof GenericReader) {
((GenericReader) genericItem).read();
}
}
}
但我认为这样的方法是更好的方法。更干净,更快的代码。删除 Generic 接口并仅使用 2 个单独的接口。
public class BetterC {
private final List<GenericTestable> genericTestables;
private final List<GenericReader> genericReaders;
@Autowired
public BetterC(List<GenericTestable> genericTestables, List<GenericReader> genericReaders) {
this.genericTestables = genericTestables;
this.genericReaders = genericReaders;
}
public void callTestables() {
this.genericTestables.forEach(GenericTestable::test);
}
public void callReaders() {
this.genericReaders.forEach(GenericReader::read);
}
}
推荐阅读
- mysql - MySQL 显示范围计数
- python - Python:引发异常但不是来自子函数
- spring-boot - Primefaces 上传过滤器干扰 Servlet 上传
- vba - WHERE 子句上的“之前的最大日期”(OleDB SELECT 方法)
- reactjs - 在 Reactjs 中使用路由器时无法返回上一页
- c# - 有什么方法可以使用一种 c# 方法拆分两个不同的字符串?
- google-apps-script - 如何在没有用户干预的情况下输入 Google Sheets App Script?
- tensorflow - 如何使用 tf.range 创建 complex128 张量
- python - 将 matlab.object 转换为 pandas 数据框
- groovy - Groovy:带引号的 LinkedHashMap 值