package org.unbrokendome.eventbus.proxy;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.ListableBeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.unbrokendome.eventbus.EventSubscriber;
import org.unbrokendome.eventbus.components.EventBusBuilder;
import org.unbrokendome.eventbus.config.EventBusConfigurer;
import java.util.Collection;
@Configuration
public class AnnotationSubscriberConfig implements EventBusConfigurer, Ordered, BeanFactoryAware {
private BeanFactory beanFactory;
@Override
public int getOrder() {
return Ordered.LOWEST_PRECEDENCE;
}
@Override
public void setBeanFactory(BeanFactory beanFactory) {
this.beanFactory = beanFactory;
}
@Bean
public EventSubscriberBeanPostProcessor eventSubscriberBeanFactoryPostProcessor() {
return new EventSubscriberBeanPostProcessor();
}
@Override
public void configureEventBus(EventBusBuilder eventBusBuilder) {
Collection<? extends EventSubscriber> eventSubscribers =
((ListableBeanFactory) beanFactory).getBeansOfType(EventSubscriberProxy.class).values();
eventBusBuilder.addSubscribers(eventSubscribers);
}
}