diff --git a/archaius2-guice/src/main/java/com/netflix/archaius/guice/ArchaiusModule.java b/archaius2-guice/src/main/java/com/netflix/archaius/guice/ArchaiusModule.java index b0b85114e..bc52d4996 100644 --- a/archaius2-guice/src/main/java/com/netflix/archaius/guice/ArchaiusModule.java +++ b/archaius2-guice/src/main/java/com/netflix/archaius/guice/ArchaiusModule.java @@ -18,14 +18,17 @@ import java.util.Properties; import com.google.inject.AbstractModule; +import com.google.inject.Scopes; import com.google.inject.binder.LinkedBindingBuilder; import com.google.inject.multibindings.Multibinder; import com.google.inject.name.Names; import com.netflix.archaius.api.CascadeStrategy; import com.netflix.archaius.api.Config; +import com.netflix.archaius.api.ConfigReader; import com.netflix.archaius.api.inject.DefaultLayer; import com.netflix.archaius.api.inject.RemoteLayer; import com.netflix.archaius.config.MapConfig; +import com.netflix.archaius.readers.PropertiesConfigReader; /** * Guice Module for enabling archaius and making its components injectable. Installing this @@ -239,8 +242,33 @@ protected void bindApplicationConfigurationOverrideResource(String overrideResou Multibinder.newSetBinder(binder(), String.class, ApplicationOverrideResources.class).permitDuplicates().addBinding().toInstance(overrideResource); } + /** + * Binding ConfigReaders has been removed from InternalArchaiusModule class which is locked for modification and it has been added to configure as overridable method. + *

+ * For example to disable default PropertyConfigReader and add TypesafeConfigReader + *
+ * + *
+     * install(new ArchaiusModule() {
+     *    {@literal @}Override
+     *    protected void bindDefaultReaders() {}
+     *
+     *    {@literal @}Override
+     *    protected void configureArchaius() {
+     *          Multibinder.newSetBinder(this.binder(), ConfigReader.class).addBinding().to(TypesafeConfigReader.class).asEagerSingleton();
+     *    }
+     * });
+     * 
+ *
+ */ + protected void bindDefaultReaders() { + Multibinder.newSetBinder(binder(), ConfigReader.class) + .addBinding().to(PropertiesConfigReader.class).in(Scopes.SINGLETON); + } + @Override protected final void configure() { + bindDefaultReaders(); install(new InternalArchaiusModule()); configureArchaius(); diff --git a/archaius2-guice/src/main/java/com/netflix/archaius/guice/InternalArchaiusModule.java b/archaius2-guice/src/main/java/com/netflix/archaius/guice/InternalArchaiusModule.java index b87caece8..ca4b9c0f1 100644 --- a/archaius2-guice/src/main/java/com/netflix/archaius/guice/InternalArchaiusModule.java +++ b/archaius2-guice/src/main/java/com/netflix/archaius/guice/InternalArchaiusModule.java @@ -3,21 +3,13 @@ import com.google.inject.AbstractModule; import com.google.inject.Inject; import com.google.inject.Provides; -import com.google.inject.Scopes; import com.google.inject.Singleton; import com.google.inject.matcher.Matchers; -import com.google.inject.multibindings.Multibinder; import com.netflix.archaius.ConfigProxyFactory; import com.netflix.archaius.DefaultConfigLoader; import com.netflix.archaius.DefaultDecoder; import com.netflix.archaius.DefaultPropertyFactory; -import com.netflix.archaius.api.CascadeStrategy; -import com.netflix.archaius.api.Config; -import com.netflix.archaius.api.ConfigLoader; -import com.netflix.archaius.api.ConfigReader; -import com.netflix.archaius.api.Decoder; -import com.netflix.archaius.api.PropertyFactory; -import com.netflix.archaius.api.PropertyRepository; +import com.netflix.archaius.api.*; import com.netflix.archaius.api.config.CompositeConfig; import com.netflix.archaius.api.config.SettableConfig; import com.netflix.archaius.api.exceptions.ConfigException; @@ -31,13 +23,11 @@ import com.netflix.archaius.config.EnvironmentConfig; import com.netflix.archaius.config.SystemConfig; import com.netflix.archaius.interpolate.ConfigStrLookup; -import com.netflix.archaius.readers.PropertiesConfigReader; - -import java.util.Set; -import java.util.concurrent.atomic.AtomicInteger; import javax.inject.Named; import javax.inject.Provider; +import java.util.Set; +import java.util.concurrent.atomic.AtomicInteger; final class InternalArchaiusModule extends AbstractModule { static final String CONFIG_NAME_KEY = "archaius.config.name"; @@ -65,9 +55,6 @@ protected void configure() { bind(ConfigurationInjectingListener.class).toInstance(listener); requestStaticInjection(ConfigurationInjectingListener.class); bindListener(Matchers.any(), listener); - - Multibinder.newSetBinder(binder(), ConfigReader.class) - .addBinding().to(PropertiesConfigReader.class).in(Scopes.SINGLETON); } @Provides diff --git a/archaius2-guice/src/test/java/com/netflix/archaius/guice/InternalArchaiusModuleTest.java b/archaius2-guice/src/test/java/com/netflix/archaius/guice/InternalArchaiusModuleTest.java index b8f160668..56342ecfb 100644 --- a/archaius2-guice/src/test/java/com/netflix/archaius/guice/InternalArchaiusModuleTest.java +++ b/archaius2-guice/src/test/java/com/netflix/archaius/guice/InternalArchaiusModuleTest.java @@ -1,6 +1,10 @@ package com.netflix.archaius.guice; +import com.google.inject.AbstractModule; import com.google.inject.Guice; +import com.google.inject.multibindings.Multibinder; +import com.netflix.archaius.api.ConfigReader; +import com.netflix.archaius.readers.PropertiesConfigReader; import org.junit.Test; public class InternalArchaiusModuleTest { @@ -8,7 +12,14 @@ public class InternalArchaiusModuleTest { @Test public void succeedOnDuplicateInstall() { Guice.createInjector( - new InternalArchaiusModule(), - new InternalArchaiusModule()); + new AbstractModule() { + @Override + protected void configure() { + Multibinder.newSetBinder(this.binder(), ConfigReader.class).addBinding().to(PropertiesConfigReader.class).asEagerSingleton(); + } + }, + new InternalArchaiusModule(), + new InternalArchaiusModule() + ); } }