package de.devsurf.injection.guice.serviceloader;
import java.util.ServiceLoader;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.google.inject.AbstractModule;
import com.google.inject.Module;
public class ModuleLoader<M extends Module> extends AbstractModule {
private Logger _logger = Logger.getLogger(ServiceLoaderModule.class.getName());
private final Class<M> type;
public ModuleLoader(Class<M> type) {
this.type = type;
}
public static <M extends Module> ModuleLoader<M> of(Class<M> type) {
return new ModuleLoader<M>(type);
}
@Override
protected void configure() {
ServiceLoader<M> modules = ServiceLoader.load(type);
for (Module module : modules) {
try {
install(module);
} catch (Exception e) {
_logger.log(Level.WARNING, "Module can't be installed, because an Exception was raised. "+e.getMessage(), e);
}
}
}
}