diff --git a/pom.xml b/pom.xml index 2173248..ef83ad4 100644 --- a/pom.xml +++ b/pom.xml @@ -34,6 +34,12 @@ 4.1.0 compile + + com.google.inject.extensions + guice-multibindings + 4.1.0 + test + org.springframework spring-test diff --git a/src/main/java/org/springframework/guice/annotation/ModuleRegistryConfiguration.java b/src/main/java/org/springframework/guice/annotation/ModuleRegistryConfiguration.java index 9c07343..8c8501c 100644 --- a/src/main/java/org/springframework/guice/annotation/ModuleRegistryConfiguration.java +++ b/src/main/java/org/springframework/guice/annotation/ModuleRegistryConfiguration.java @@ -31,6 +31,7 @@ import com.google.inject.Key; import com.google.inject.Module; import com.google.inject.Scopes; import com.google.inject.Stage; +import com.google.inject.internal.LinkedBindingImpl; import com.google.inject.name.Named; import com.google.inject.spi.Element; import com.google.inject.spi.ElementSource; @@ -111,6 +112,11 @@ class ModuleRegistryConfiguration .equals(entry.getValue().getSource().toString())) { continue; } + if (entry.getKey().getAnnotationType() != null && + entry.getKey().getAnnotationType().getName() + .startsWith("com.google.inject.multibindings")) { + continue; + } Binding binding = entry.getValue(); Key key = entry.getKey(); diff --git a/src/test/java/org/springframework/guice/BindingDeduplicationTests.java b/src/test/java/org/springframework/guice/BindingDeduplicationTests.java index 22aaf38..a8e202f 100644 --- a/src/test/java/org/springframework/guice/BindingDeduplicationTests.java +++ b/src/test/java/org/springframework/guice/BindingDeduplicationTests.java @@ -3,6 +3,7 @@ package org.springframework.guice; import com.google.inject.AbstractModule; import com.google.inject.Module; +import com.google.inject.multibindings.OptionalBinder; import org.junit.AfterClass; import org.junit.Test; import org.springframework.beans.factory.BeanCreationException; @@ -10,6 +11,7 @@ import org.springframework.context.annotation.AnnotationConfigApplicationContext import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.guice.BindingDeduplicationTests.SomeDependency; +import org.springframework.guice.BindingDeduplicationTests.SomeOptionalDependency; import org.springframework.guice.annotation.EnableGuiceModules; import static org.junit.Assert.assertNotNull; @@ -28,6 +30,8 @@ public class BindingDeduplicationTests { BindingDeduplicationTestsConfig.class); SomeDependency someDependency = context.getBean(SomeDependency.class); assertNotNull(someDependency); + SomeOptionalDependency someOptionalDependency = context.getBean(SomeOptionalDependency.class); + assertNotNull(someOptionalDependency); context.close(); } @@ -39,8 +43,8 @@ public class BindingDeduplicationTests { context.close(); } - public static class SomeDependency { - } + public static class SomeDependency {} + public static class SomeOptionalDependency {} } @@ -49,16 +53,25 @@ public class BindingDeduplicationTests { class BindingDeduplicationTestsConfig { @Bean - public SomeDependency stringBean() { + public SomeDependency someBean() { return new SomeDependency(); } + @Bean + public SomeOptionalDependency someOptionalBean() { + return new SomeOptionalDependency(); + } + @Bean public Module module() { return new AbstractModule() { @Override protected void configure() { bind(SomeDependency.class).asEagerSingleton(); + OptionalBinder + .newOptionalBinder(binder(), SomeOptionalDependency.class) + .setDefault() + .to(SomeOptionalDependency.class); } }; }