package com.netflix.governator.guice; import com.google.common.base.Preconditions; import com.netflix.governator.annotations.AutoBindSingleton; import com.netflix.governator.configuration.ConfigurationProvider; import com.netflix.governator.lifecycle.ClasspathScanner; public class LoadersBootstrapModule implements BootstrapModule { private ClasspathScanner scanner; public LoadersBootstrapModule(ClasspathScanner scanner) { this.scanner = scanner; } @Override public void configure(BootstrapBinder binder) { for ( Class<?> clazz : scanner.getClasses() ) { if ( clazz.isAnnotationPresent(AutoBindSingleton.class) && ConfigurationProvider.class.isAssignableFrom(clazz) ) { AutoBindSingleton annotation = clazz.getAnnotation(AutoBindSingleton.class); Preconditions.checkState(annotation.value() == AutoBindSingleton.class, "@AutoBindSingleton value cannot be set for ConfigurationProviders"); Preconditions.checkState(annotation.baseClass() == AutoBindSingleton.class, "@AutoBindSingleton value cannot be set for ConfigurationProviders"); Preconditions.checkState(!annotation.multiple(), "@AutoBindSingleton(multiple=true) value cannot be set for ConfigurationProviders"); @SuppressWarnings("unchecked") Class<? extends ConfigurationProvider> configurationProviderClass = (Class<? extends ConfigurationProvider>)clazz; binder.bindConfigurationProvider().to(configurationProviderClass).asEagerSingleton(); } } } }