From f36792d4197891455d8fa34ea65d6a052c06d216 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Fri, 17 May 2013 19:50:35 +0200 Subject: [PATCH] DATAMONGO-569 - Improved AbstractMongoConfiguration. AbstractMongoConfiguration doesn't expose a Mongo instance anymore until you explicitly make it one by annotating the implementation method in the configuration sub lass with @Bean. Removed the custom call to MongoMappingContext.initialize() as Spring call the lifecycle method for us anyway. --- .../config/AbstractMongoConfiguration.java | 6 +-- .../AbstractMongoConfigurationUnitTests.java | 38 ++++++++++++++++++- 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/AbstractMongoConfiguration.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/AbstractMongoConfiguration.java index 47ff212c5..8ebddf1bb 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/AbstractMongoConfiguration.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/AbstractMongoConfiguration.java @@ -59,12 +59,12 @@ public abstract class AbstractMongoConfiguration { protected abstract String getDatabaseName(); /** - * Return the {@link Mongo} instance to connect to. + * Return the {@link Mongo} instance to connect to. Annotate with {@link Bean} in case you want to expose a + * {@link Mongo} instance to the {@link org.springframework.context.ApplicationContext}. * * @return * @throws Exception */ - @Bean public abstract Mongo mongo() throws Exception; /** @@ -140,8 +140,6 @@ public abstract class AbstractMongoConfiguration { mappingContext.setFieldNamingStrategy(new CamelCaseAbbreviatingFieldNamingStrategy()); } - mappingContext.initialize(); - return mappingContext; } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AbstractMongoConfigurationUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AbstractMongoConfigurationUnitTests.java index 9423978b2..6a9fa1fe6 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AbstractMongoConfigurationUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AbstractMongoConfigurationUnitTests.java @@ -18,9 +18,15 @@ package org.springframework.data.mongodb.config; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; +import org.junit.Rule; import org.junit.Test; -import org.springframework.context.annotation.Bean; +import org.junit.rules.ExpectedException; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.mongodb.MongoDbFactory; import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.mongodb.core.mapping.MongoMappingContext; import com.mongodb.Mongo; @@ -31,6 +37,9 @@ import com.mongodb.Mongo; */ public class AbstractMongoConfigurationUnitTests { + @Rule + public ExpectedException exception = ExpectedException.none(); + /** * @see DATAMONGO-496 */ @@ -63,6 +72,31 @@ public class AbstractMongoConfigurationUnitTests { assertScanningDisabled(" "); } + /** + * @see DATAMONGO-569 + */ + @Test + public void containsMongoDbFactoryButNoMongoBean() { + + AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SampleMongoConfiguration.class); + + assertThat(context.getBean(MongoDbFactory.class), is(notNullValue())); + + exception.expect(NoSuchBeanDefinitionException.class); + context.getBean(Mongo.class); + } + + @Test + public void returnsUninitializedMappingContext() throws Exception { + + SampleMongoConfiguration configuration = new SampleMongoConfiguration(); + MongoMappingContext context = configuration.mongoMappingContext(); + + assertThat(context.getPersistentEntities(), is(emptyIterable())); + context.initialize(); + assertThat(context.getPersistentEntities(), is(not(emptyIterable()))); + } + private static void assertScanningDisabled(final String value) throws ClassNotFoundException { AbstractMongoConfiguration configuration = new SampleMongoConfiguration() { @@ -76,6 +110,7 @@ public class AbstractMongoConfigurationUnitTests { assertThat(configuration.getInitialEntitySet(), hasSize(0)); } + @Configuration static class SampleMongoConfiguration extends AbstractMongoConfiguration { @Override @@ -83,7 +118,6 @@ public class AbstractMongoConfigurationUnitTests { return "database"; } - @Bean @Override public Mongo mongo() throws Exception { return new Mongo();