public void onProvision()

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);
            }
        }        
    }