@Override public void initialize(Configuration config) { selectors.sort(comparing(ProcessorSelector::getPriority).reversed()); this.config = config; Map<String, List<Object>> assignments = new HashMap<>(); eventHandlers.stream().map(Component::get).forEach(handler -> { String processor = selectors.stream().map(s -> s.select(handler)).filter(Optional::isPresent).map(Optional::get) .findFirst() .orElseGet(() -> defaultSelector.select(handler).orElseThrow(IllegalStateException::new)); assignments.computeIfAbsent(processor, k -> new ArrayList<>()).add(handler); }); onInit.forEach(h -> h.accept(config)); assignments.forEach((name, handlers) -> { config.eventProcessingConfiguration().registerHandlerInvoker(name, c -> new SimpleEventHandlerInvoker(handlers, c.parameterResolverFactory(), getListenerInvocationErrorHandler(c, name), getSequencingPolicy(c, name))); if (eventProcessorBuilders.containsKey(name)) { eventProcessorBuilders.get(name).accept(config, handlers); } interceptorsFor(config, name).forEach(i -> config.eventProcessingConfiguration() .registerHandlerInterceptor(name, c -> i)); }); }