package org.dayatang.dddlib.event.api;
import org.reflections.Reflections;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Set;
/**
* 事件处理器装载器。在指定的包中扫描事件处理器,并将其注册到事件总线。
*
* Created by yyang on 15/4/10.
*/
public class EventListenerLoader {
private static final Logger LOGGER = LoggerFactory.getLogger(EventListenerLoader.class);
//事件总线,用于注册事件监听器
private EventBus eventBus;
//包的数组,从这些包中寻找事件监听器,注册到事件总线
private String[] packages;
public EventListenerLoader(EventBus eventBus, String[] packages) {
this.eventBus = eventBus;
this.packages = packages;
}
/**
* 在指定的包中扫描事件处理器,并将其注册到事件总线。
*/
public void execute() {
for (String each : packages) {
Reflections reflections = new Reflections(each);
Set<Class<? extends AbstractEventListener>> handlers = reflections.getSubTypesOf(AbstractEventListener.class);
for (Class<? extends EventListener> handler : handlers) {
try {
eventBus.register(handler.newInstance());
} catch (InstantiationException e) {
e.printStackTrace();
LOGGER.error("Handler " + handler + " create failed!", e);
} catch (IllegalAccessException e) {
e.printStackTrace();
LOGGER.error("Handler " + handler + " create failed!", e);
}
}
}
}
}