diff --git a/src/main/java/org/springframework/guice/GuiceModuleMetadata.java b/src/main/java/org/springframework/guice/GuiceModuleMetadata.java index 499b83a..2555353 100644 --- a/src/main/java/org/springframework/guice/GuiceModuleMetadata.java +++ b/src/main/java/org/springframework/guice/GuiceModuleMetadata.java @@ -104,7 +104,7 @@ public class GuiceModuleMetadata { private boolean visible(Class type) { Class cls = type; while (cls != null && cls != Object.class) { - if (!Modifier.isPublic(cls.getModifiers())) { + if (!Modifier.isInterface(cls.getModifiers()) && !Modifier.isPublic(cls.getModifiers()) && !Modifier.isProtected(cls.getModifiers())) { return false; } cls = cls.getDeclaringClass(); diff --git a/src/test/java/org/springframework/guice/SpringModuleMetadataTests.java b/src/test/java/org/springframework/guice/SpringModuleMetadataTests.java index 76da586..22c005a 100644 --- a/src/test/java/org/springframework/guice/SpringModuleMetadataTests.java +++ b/src/test/java/org/springframework/guice/SpringModuleMetadataTests.java @@ -13,6 +13,7 @@ package org.springframework.guice; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import javax.inject.Inject; @@ -28,6 +29,7 @@ import org.springframework.core.type.filter.AnnotationTypeFilter; import org.springframework.core.type.filter.AssignableTypeFilter; import com.google.inject.ConfigurationException; +import com.google.inject.CreationException; import com.google.inject.Guice; import com.google.inject.Injector; @@ -43,8 +45,15 @@ public class SpringModuleMetadataTests { @Test public void twoConfigClasses() throws Exception { Injector injector = createInjector(TestConfig.class, OtherConfig.class); - expected.expect(ConfigurationException.class); - assertNull(injector.getBinding(Service.class)); + assertNotNull(injector.getBinding(Service.class)); + } + + @Test + public void twoServices() throws Exception { + // Two beans with the same interface cause problems at startup + expected.expect(CreationException.class); + Injector injector = createInjector(TestConfig.class, MoreConfig.class); + assertNotNull(injector.getBinding(Service.class)); } @Test @@ -111,6 +120,14 @@ public class SpringModuleMetadataTests { } } + @Configuration + public static class MoreConfig { + @Bean + public Service more() { + return new MyService(); + } + } + @Configuration public static class OtherConfig { }