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