Spring: get all Beans of certain interface AND type

Askar Ibragimov picture Askar Ibragimov · Oct 27, 2016 · Viewed 40.3k times · Source

In my Spring Boot application, suppose I have interface in Java:

public interface MyFilter<E extends SomeDataInterface> 

(a good example is Spring's public interface ApplicationListener< E extends ApplicationEvent > )

and I have couple of implementations like:

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

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

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

Then, in some object I am interested to utilize all filters that implement MyFilter< SpecificDataInterface > but NOT MyFilter< AnotherSpecificDataInterface >

What would be the syntax for this?

Answer

mh-dev picture mh-dev · Oct 27, 2016

The following will inject every MyFilter instance that has a type that extends SpecificDataInterface as generic argument into the List.

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