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.
This commit is contained in:
Phillip Webb
2013-09-25 20:58:27 -07:00
parent 26303a9767
commit e16a0278ae
2 changed files with 30 additions and 6 deletions

View File

@@ -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) {

View File

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