Come ottengo un riferimento di tutti i bean che implementano un'interfaccia generica specifica (ad esempio, il filtro <TestEvent
>) in primavera?Ottieni tutti i bean che implementano un'interfaccia generica in primavera
Questo è ciò che voglio raggiungere con un numero minimo di linee:
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
}
}
//...
}
}
mio attuale implementazione utilizza la riflessione per determinare se filter.approve non accetta l'evento prima di chiamare. 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
}
}
}
Qualora la doesFilterAcceptEventAsArgument fa tutto il lavoro brutto che vorrei vorrebbe allontanarsi da. Eventuali suggerimenti?
Grazie, proprio come sospettavo. –