弹簧:获取特定接口和类型的所有Bean

2022-08-31 13:08:11

在我的Spring Boot应用程序中,假设我有Java接口:

public interface MyFilter<E extends SomeDataInterface> 

(一个很好的例子是Spring的公共接口AppplicationListener<E扩展了ExportingEvent> )

我有几个实现,比如:

@Component
public class DesignatedFilter1 implements MyFilter<SpecificDataInterface>{...}

@Component
public class DesignatedFilter2 implements MyFilter<SpecificDataInterface>{...}

@Component
public class DesignatedFilter3 implements MyFilter<AnotherSpecificDataInterface>{...}

然后,在某些对象中,我有兴趣利用所有实现MyFilter< SpecificDataInterface >但不是MyFilter<另一个SpecificDataInterface>

这是什么语法?


答案 1

下面将每个 MyFilter 实例注入到 List 中,该实例具有将 SpecificDataInterface 扩展为泛型参数的类型。

@Autowired
private List<MyFilter<? extends SpecificDataInterface>> list;

答案 2

您可以简单地使用

@Autowired
private List<MyFilter<SpecificDataInterface>> filters;

编辑7 / 28 / 2020:

由于不建议使用现场注入,因此应使用构造函数注入而不是现场注入

使用构造函数注入:

class MyComponent {

  private final List<MyFilter<SpecificDataInterface>> filters;

  public MyComponent(List<MyFilter<SpecificDataInterface>> filters) {
    this.filters = filters;
  }
  ...
}

推荐