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?
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;