From ae7098ae1d8ed13bed52f67f30612e7ecf39d618 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Thu, 3 Apr 2014 10:35:27 -0500 Subject: [PATCH] Add RepositoryRestMvcAutoConfiguration Fixes gh-626 --- spring-boot-autoconfigure/pom.xml | 5 ++ .../RepositoryRestMvcAutoConfiguration.java | 48 ++++++++++++++ .../main/resources/META-INF/spring.factories | 1 + ...positoryRestMvcAutoConfigurationTests.java | 62 +++++++++++++++++++ .../data/jpa/SampleDataRestApplication.java | 3 - 5 files changed, 116 insertions(+), 3 deletions(-) create mode 100644 spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/rest/RepositoryRestMvcAutoConfiguration.java create mode 100644 spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/rest/RepositoryRestMvcAutoConfigurationTests.java diff --git a/spring-boot-autoconfigure/pom.xml b/spring-boot-autoconfigure/pom.xml index f21289397d1..18eb347285c 100644 --- a/spring-boot-autoconfigure/pom.xml +++ b/spring-boot-autoconfigure/pom.xml @@ -126,6 +126,11 @@ spring-data-jpa true + + org.springframework.data + spring-data-rest-webmvc + true + org.springframework.data spring-data-mongodb diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/rest/RepositoryRestMvcAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/rest/RepositoryRestMvcAutoConfiguration.java new file mode 100644 index 00000000000..6427ee0ccb7 --- /dev/null +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/rest/RepositoryRestMvcAutoConfiguration.java @@ -0,0 +1,48 @@ +/* + * Copyright 2002-2013 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.boot.autoconfigure.data.rest; + +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration; + +/** + * {@link EnableAutoConfiguration Auto-configuration} for Spring Data Rest's MVC + * integration. + *

+ * Activates when the application is a web application and no + * {@link RepositoryRestMvcConfiguration} is found. + *

+ *

+ * Once in effect, the auto-configuration is the equivalent of importing the + * {@link RepositoryRestMvcConfiguration}. + *

+ * + * @author Rob Winch + * @since 1.1.0 + */ +@Configuration +@ConditionalOnWebApplication +@ConditionalOnMissingBean(RepositoryRestMvcConfiguration.class) +@ConditionalOnClass(RepositoryRestMvcConfiguration.class) +@Import(RepositoryRestMvcConfiguration.class) +public class RepositoryRestMvcAutoConfiguration { + +} diff --git a/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories b/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories index 2983e7ee72c..feed488f053 100644 --- a/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories +++ b/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories @@ -12,6 +12,7 @@ org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\ org.springframework.boot.autoconfigure.data.JpaRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.MongoRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration,\ +org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration,\ org.springframework.boot.autoconfigure.redis.RedisAutoConfiguration,\ org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\ org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\ diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/rest/RepositoryRestMvcAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/rest/RepositoryRestMvcAutoConfigurationTests.java new file mode 100644 index 00000000000..cff31d38d87 --- /dev/null +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/rest/RepositoryRestMvcAutoConfigurationTests.java @@ -0,0 +1,62 @@ +/* + * Copyright 2002-2013 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.boot.autoconfigure.data.rest; + +import static org.junit.Assert.assertNotNull; + +import org.junit.Test; +import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; +import org.springframework.boot.autoconfigure.TestAutoConfigurationPackage; +import org.springframework.boot.autoconfigure.data.JpaRepositoriesAutoConfiguration; +import org.springframework.boot.autoconfigure.data.jpa.City; +import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration; +import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration; +import org.springframework.mock.web.MockServletContext; +import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +/** + * + * @author Rob Winch + * + */ +public class RepositoryRestMvcAutoConfigurationTests { + + private AnnotationConfigWebApplicationContext context; + + @Test + public void testDefaultRepositoryConfiguration() throws Exception { + this.context = new AnnotationConfigWebApplicationContext(); + this.context.setServletContext(new MockServletContext()); + this.context.register(TestConfiguration.class, + EmbeddedDataSourceConfiguration.class, + HibernateJpaAutoConfiguration.class, + JpaRepositoriesAutoConfiguration.class, + PropertyPlaceholderAutoConfiguration.class, + RepositoryRestMvcAutoConfiguration.class); + this.context.refresh(); + assertNotNull(this.context.getBean(RepositoryRestMvcConfiguration.class)); + } + + @Configuration + @TestAutoConfigurationPackage(City.class) + @EnableWebMvc + protected static class TestConfiguration { + + } +} diff --git a/spring-boot-samples/spring-boot-sample-data-rest/src/main/java/sample/data/jpa/SampleDataRestApplication.java b/spring-boot-samples/spring-boot-sample-data-rest/src/main/java/sample/data/jpa/SampleDataRestApplication.java index 2037c2518e7..242fe506e71 100644 --- a/spring-boot-samples/spring-boot-sample-data-rest/src/main/java/sample/data/jpa/SampleDataRestApplication.java +++ b/spring-boot-samples/spring-boot-sample-data-rest/src/main/java/sample/data/jpa/SampleDataRestApplication.java @@ -20,13 +20,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; -import org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration; @Configuration @ComponentScan @EnableAutoConfiguration -@Import(RepositoryRestMvcConfiguration.class) public class SampleDataRestApplication { public static void main(String[] args) throws Exception {