in archaius2-guice/src/main/java/com/netflix/archaius/guice/ConfigurationInjectingListener.java [59:113]
public <T> void onProvision(ProvisionInvocation<T> provision) {
Class<?> clazz = provision.getBinding().getKey().getTypeLiteral().getRawType();
//
// Configuration Loading
//
final ConfigurationSource source = clazz.getDeclaredAnnotation(ConfigurationSource.class);
if (source != null) {
if (injector == null) {
LOG.warn("Can't inject configuration into {} until ConfigurationInjectingListener has been initialized", clazz.getName());
return;
}
CascadeStrategy strategy = source.cascading() != ConfigurationSource.NullCascadeStrategy.class
? injector.getInstance(source.cascading()) : getCascadeStrategy();
List<String> sources = Arrays.asList(source.value());
Collections.reverse(sources);
for (String resourceName : sources) {
LOG.debug("Trying to loading configuration resource {}", resourceName);
try {
CompositeConfig loadedConfig = loader
.newLoader()
.withCascadeStrategy(strategy)
.load(resourceName);
libraries.addConfig(resourceName, loadedConfig);
} catch (ConfigException e) {
throw new ProvisionException("Unable to load configuration for " + resourceName, e);
}
}
}
//
// Configuration binding
//
Configuration configAnnot = clazz.getAnnotation(Configuration.class);
if (configAnnot != null) {
if (injector == null) {
LOG.warn("Can't inject configuration into {} until ConfigurationInjectingListener has been initialized", clazz.getName());
return;
}
try {
mapper.mapConfig(provision.provision(), config, new IoCContainer() {
@Override
public <S> S getInstance(String name, Class<S> type) {
return injector.getInstance(Key.get(type, Names.named(name)));
}
});
}
catch (Exception e) {
throw new ProvisionException("Unable to bind configuration to " + clazz, e);
}
}
}