diff --git a/src/main/java/org/springframework/guice/annotation/ModuleRegistryConfiguration.java b/src/main/java/org/springframework/guice/annotation/ModuleRegistryConfiguration.java index 545cfe4..a81e6a6 100644 --- a/src/main/java/org/springframework/guice/annotation/ModuleRegistryConfiguration.java +++ b/src/main/java/org/springframework/guice/annotation/ModuleRegistryConfiguration.java @@ -15,6 +15,7 @@ package org.springframework.guice.annotation; import java.lang.annotation.Annotation; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -172,6 +173,14 @@ class ModuleRegistryConfiguration elements = removeDuplicates(elements); modules = Collections.singletonList(Elements.getModule(elements)); } + if (applicationContext.getEnvironment().containsProperty("spring.guice.modules.exclude")) { + String[] modulesToFilter = applicationContext.getEnvironment() + .getProperty("spring.guice.modules.exclude").split(","); + elements = elements.stream() + .filter(e -> !Arrays.stream(modulesToFilter) + .filter(ex -> (e.getSource().toString().contains(ex))).findFirst().isPresent()) + .collect(Collectors.toList()); + } for (Element e : elements) { if (e instanceof Binding) { Binding binding = (Binding) e; diff --git a/src/test/java/org/springframework/guice/ModuleFilteringTests.java b/src/test/java/org/springframework/guice/ModuleFilteringTests.java new file mode 100644 index 0000000..9c8356e --- /dev/null +++ b/src/test/java/org/springframework/guice/ModuleFilteringTests.java @@ -0,0 +1,73 @@ +package org.springframework.guice; + +import static org.junit.Assert.assertNotNull; + +import org.junit.AfterClass; +import org.junit.Test; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.guice.ModuleFilteringTests.FilterThisModule; +import org.springframework.guice.annotation.EnableGuiceModules; + +import com.google.inject.AbstractModule; +import com.google.inject.Module; + +public class ModuleFilteringTests { + + @AfterClass + public static void cleanUp() { + System.clearProperty("spring.guice.modules.exclude"); + } + + @Test + public void verifyAllIsWellWhenNoModulesFiltered() { + System.setProperty("spring.guice.modules.exclude", "FilterSomeNonExistentModule"); + AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext( + ModuleFilteringTestsConfig.class); + SomeInterface someDependency = context.getBean(SomeInterface.class); + assertNotNull(someDependency); + context.close(); + } + + @Test(expected=NoSuchBeanDefinitionException.class) + public void verifyFilteredModuleIsFiltered() { + System.setProperty("spring.guice.modules.exclude", "FilterThisModule"); + AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext( + ModuleFilteringTestsConfig.class); + try { + context.getBean(SomeInterface.class); + } finally { + context.close(); + } + } + + public static interface SomeInterface {} + + public static class SomeDependency implements SomeInterface { + } + + public static class FilterThisModule extends AbstractModule { + @Override + protected void configure() { + bind(SomeInterface.class).to(SomeDependency.class).asEagerSingleton(); + } + } +} + +@EnableGuiceModules +@Configuration +class ModuleFilteringTestsConfig { + + @Bean + public Module module() { + return new AbstractModule() { + + @Override + protected void configure() { + install(new FilterThisModule()); + } + }; + } +} \ No newline at end of file