com.github.dxee.dject.event.ApplicationEventModule Maven / Gradle / Ivy
Show all versions of dject-event Show documentation
package com.github.dxee.dject.event;
import com.github.dxee.dject.event.guava.GuavaApplicationEventModule;
import com.google.inject.AbstractModule;
import com.google.inject.TypeLiteral;
import com.google.inject.matcher.Matchers;
import com.google.inject.spi.InjectionListener;
import com.google.inject.spi.ProvisionListener;
import com.google.inject.spi.TypeEncounter;
import com.google.inject.spi.TypeListener;
import javax.inject.Provider;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* Adds support for passing {@link ApplicationEvent}s. Default (Guava-based) implementation
* can be found in {@link GuavaApplicationEventModule}
*
* See {@link EventListener} and {@link ApplicationEventDispatcher} for usage.
*/
public final class ApplicationEventModule extends AbstractModule {
private static class ApplicationEventSubscribingTypeListener implements TypeListener {
private final Provider dispatcherProvider;
public ApplicationEventSubscribingTypeListener(Provider dispatcherProvider) {
this.dispatcherProvider = dispatcherProvider;
}
@Override
public void hear(TypeLiteral type, TypeEncounter encounter) {
final Class clazz = type.getRawType();
final List handlerMethods = getAllDeclaredHandlerMethods(clazz);
if (!handlerMethods.isEmpty()) {
encounter.register((InjectionListener