Obtenez tous les haricots mise en œuvre d'une interface générique au Printemps

Comment puis-je obtenir une référence de tous les haricots mise en oeuvre de l'interface générique (par exemple, des filtres<TestEvent>) dans le Printemps?

C'est ce que je veux atteindre avec un nombre minimum de lignes:

public interface Filter<T extends Event> {

    boolean approve(T event);

}


public class TestEventFilter implements Filter<TestEvent> {

    public boolean approve(TestEvent event){
        return false;
    }

}

public class EventHandler{
    private ApplicationContext context;

    public void Eventhandler(DomainEvent event) {
        //I want to do something like following, but this is not valid code
        Map<String, Filter> filters = context.getBeansOfType(Filter<event.getClass()>.class);
        for(Filter filter: filters.values()){
            if (!filter.approve(event)) {
                return;  //abort if a filter does not approve the event
            }
        }
        //...
    }

}

Mon actuel de la mise en œuvre utilise la réflexion pour déterminer si le filtre.approuver accepte de l'événement avant de l'appeler.
E. g.

        Map<String, Filter> filters = context.getBeansOfType(Filter.class);
        for(Filter filter: filters.values()){
            if (doesFilterAcceptEventAsArgument(filter, event)) {
                if (!filter.approve(event)) {
                    return;  //abort if a filter does not approve the event
                }
            }
        }

Où la doesFilterAcceptEventAsArgument fait tout le laid travail que je voudrais voudrais sortir de. Toutes les suggestions?

OriginalL'auteur Ola Herrdahl | 2010-07-12