blob: f6b8e98655bfdc9d73d21ff755d659df6bf0ba7e [file] [log] [blame]
package com.google.inject.lifecycle;
import com.google.inject.AbstractModule;
import com.google.inject.TypeLiteral;
import com.google.inject.internal.util.ImmutableList;
import com.google.inject.internal.util.Lists;
import java.util.List;
/**
* Use this module to configure lifecycle and multicasting support
* for your Guice applications.
*
* @author dhanji@gmail.com (Dhanji R. Prasanna)
// */
public abstract class LifecycleModule extends AbstractModule {
private final List<Class<?>> callables = Lists.newArrayList();
private boolean autostart = false;
@Override
protected final void configure() {
// Call down into module.
configureLifecycle();
// The only real purpose of this is to do some error checking.
bind(new TypeLiteral<List<Class<?>>>() { })
.annotatedWith(ListOfMatchers.class)
.toInstance(ImmutableList.copyOf(callables));
}
protected abstract void configureLifecycle();
protected void callable(Class<?> type) {
callables.add(type);
}
protected void autostart() {
this.autostart = true;
// This is a cool method that will execute after injector creating
// completes, and thus much better than the eager singleton hack.
throw new UnsupportedOperationException("Asplode!");
}
}