From e16a0278ae2c4caacf9337a6c2772af0ccea4ed6 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 25 Sep 2013 20:58:27 -0700 Subject: [PATCH] Support single config from ServletInitializer Update SpringBootServletInitializer with separate getConfigClass() and getAdditionalConfigClasses() methods. This change makes it easier to use the SpringBootServletInitializer with the common use case of a single config class. --- .../config/SampleWebSocketsApplication.java | 6 ++-- .../web/SpringBootServletInitializer.java | 30 +++++++++++++++++-- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/spring-boot-samples/spring-boot-sample-websocket/src/main/java/org/springframework/boot/samples/websocket/config/SampleWebSocketsApplication.java b/spring-boot-samples/spring-boot-sample-websocket/src/main/java/org/springframework/boot/samples/websocket/config/SampleWebSocketsApplication.java index 15ce99f139..cc6b54544c 100644 --- a/spring-boot-samples/spring-boot-sample-websocket/src/main/java/org/springframework/boot/samples/websocket/config/SampleWebSocketsApplication.java +++ b/spring-boot-samples/spring-boot-sample-websocket/src/main/java/org/springframework/boot/samples/websocket/config/SampleWebSocketsApplication.java @@ -33,10 +33,10 @@ import org.springframework.web.socket.support.PerConnectionWebSocketHandler; @Configuration @EnableAutoConfiguration public class SampleWebSocketsApplication extends SpringBootServletInitializer { - + @Override - protected Class[] getConfigClasses() { - return new Class[] { SampleWebSocketsApplication.class }; + protected Class getConfigClass() { + return SampleWebSocketsApplication.class; } public static void main(String[] args) { diff --git a/spring-boot/src/main/java/org/springframework/boot/web/SpringBootServletInitializer.java b/spring-boot/src/main/java/org/springframework/boot/web/SpringBootServletInitializer.java index 68448666de..829988ec04 100644 --- a/spring-boot/src/main/java/org/springframework/boot/web/SpringBootServletInitializer.java +++ b/spring-boot/src/main/java/org/springframework/boot/web/SpringBootServletInitializer.java @@ -25,6 +25,7 @@ import org.apache.commons.logging.LogFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext; import org.springframework.context.ApplicationContext; +import org.springframework.util.ObjectUtils; import org.springframework.web.WebApplicationInitializer; import org.springframework.web.context.ContextLoaderListener; import org.springframework.web.context.WebApplicationContext; @@ -76,8 +77,7 @@ public abstract class SpringBootServletInitializer implements WebApplicationInit servletContext.setAttribute( WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, null); } - SpringApplication application = new SpringApplication( - (Object[]) getConfigClasses()); + SpringApplication application = new SpringApplication(getConfigClasses()); AnnotationConfigEmbeddedWebApplicationContext context = new AnnotationConfigEmbeddedWebApplicationContext(); context.setParent(parent); context.setServletContext(servletContext); @@ -85,6 +85,30 @@ public abstract class SpringBootServletInitializer implements WebApplicationInit return (WebApplicationContext) application.run(); } - protected abstract Class[] getConfigClasses(); + private Object[] getConfigClasses() { + Class[] additionalConfigClasses = getAdditionalConfigClasses(); + if (ObjectUtils.isEmpty(additionalConfigClasses)) { + return new Object[] { getConfigClass() }; + } + Object[] configClasses = new Object[additionalConfigClasses.length + 1]; + configClasses[0] = getConfigClass(); + System.arraycopy(additionalConfigClasses, 0, configClasses, 1, + additionalConfigClasses.length); + return configClasses; + } + + /** + * Returns the main configuration class to load. If you need additional configuration + * classes you can also override {@link #getAdditionalConfigClasses()}. + */ + protected abstract Class getConfigClass(); + + /** + * Returns configuration classes that should be loaded in addition to the + * {@link #getConfigClass() main configuration class}. + */ + protected Class[] getAdditionalConfigClasses() { + return null; + } }