Tidy up implementation of DispatcherServletAutoConfiguration
also adds another test.
This commit is contained in:
parent
659d7b6df1
commit
85a56a79e4
|
|
@ -113,69 +113,66 @@ public class DispatcherServletAutoConfiguration {
|
|||
return checkServletRegistrations(beanFactory);
|
||||
}
|
||||
|
||||
private ConditionOutcome checkServlets(ConfigurableListableBeanFactory beanFactory) {
|
||||
List<String> servlets = Arrays.asList(beanFactory.getBeanNamesForType(
|
||||
DispatcherServlet.class, false, false));
|
||||
boolean containsDispatcherBean = beanFactory
|
||||
.containsBean(DEFAULT_DISPATCHER_SERVLET_BEAN_NAME);
|
||||
if (servlets.isEmpty()) {
|
||||
if (containsDispatcherBean) {
|
||||
return ConditionOutcome
|
||||
.noMatch("found no DispatcherServlet but a non-DispatcherServlet named "
|
||||
+ DEFAULT_DISPATCHER_SERVLET_BEAN_NAME);
|
||||
}
|
||||
return ConditionOutcome.match("no DispatcherServlet found");
|
||||
}
|
||||
if (servlets.contains(DEFAULT_DISPATCHER_SERVLET_BEAN_NAME)) {
|
||||
return ConditionOutcome.noMatch("found DispatcherServlet named "
|
||||
+ DEFAULT_DISPATCHER_SERVLET_BEAN_NAME);
|
||||
}
|
||||
}
|
||||
|
||||
private static ConditionOutcome checkServlets(
|
||||
ConfigurableListableBeanFactory beanFactory) {
|
||||
List<String> servlets = Arrays.asList(beanFactory.getBeanNamesForType(
|
||||
DispatcherServlet.class, false, false));
|
||||
boolean containsDispatcherBean = beanFactory
|
||||
.containsBean(DEFAULT_DISPATCHER_SERVLET_BEAN_NAME);
|
||||
if (servlets.isEmpty()) {
|
||||
if (containsDispatcherBean) {
|
||||
return ConditionOutcome.noMatch("found non-DispatcherServlet named "
|
||||
+ DEFAULT_DISPATCHER_SERVLET_BEAN_NAME);
|
||||
}
|
||||
|
||||
return ConditionOutcome
|
||||
.match("one or more DispatcherServlets found and none is named "
|
||||
+ DEFAULT_DISPATCHER_SERVLET_BEAN_NAME);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
*/
|
||||
protected ConditionOutcome checkServletRegistrations(
|
||||
ConfigurableListableBeanFactory beanFactory) {
|
||||
|
||||
List<String> registrations = Arrays.asList(beanFactory.getBeanNamesForType(
|
||||
ServletRegistrationBean.class, false, false));
|
||||
boolean containsDispatcherRegistrationBean = beanFactory
|
||||
.containsBean(DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME);
|
||||
|
||||
if (registrations.isEmpty()) {
|
||||
if (containsDispatcherRegistrationBean) {
|
||||
return ConditionOutcome
|
||||
.noMatch("found no ServletRegistrationBean but a non-ServletRegistrationBean named "
|
||||
+ DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME);
|
||||
}
|
||||
return ConditionOutcome.match("no ServletRegistrationBean found");
|
||||
}
|
||||
|
||||
if (registrations.contains(DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME)) {
|
||||
return ConditionOutcome.noMatch("found ServletRegistrationBean named "
|
||||
+ DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME);
|
||||
}
|
||||
if (containsDispatcherRegistrationBean) {
|
||||
return ConditionOutcome
|
||||
.noMatch("found non-ServletRegistrationBean named "
|
||||
+ DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME);
|
||||
.noMatch("found no DispatcherServlet but a non-DispatcherServlet named "
|
||||
+ DEFAULT_DISPATCHER_SERVLET_BEAN_NAME);
|
||||
}
|
||||
|
||||
return ConditionOutcome
|
||||
.match("one or more ServletRegistrationBeans is found and none is named "
|
||||
+ DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME);
|
||||
|
||||
return ConditionOutcome.match("no DispatcherServlet found");
|
||||
}
|
||||
if (servlets.contains(DEFAULT_DISPATCHER_SERVLET_BEAN_NAME)) {
|
||||
return ConditionOutcome.noMatch("found DispatcherServlet named "
|
||||
+ DEFAULT_DISPATCHER_SERVLET_BEAN_NAME);
|
||||
}
|
||||
if (containsDispatcherBean) {
|
||||
return ConditionOutcome.noMatch("found non-DispatcherServlet named "
|
||||
+ DEFAULT_DISPATCHER_SERVLET_BEAN_NAME);
|
||||
}
|
||||
|
||||
return ConditionOutcome
|
||||
.match("one or more DispatcherServlets found and none is named "
|
||||
+ DEFAULT_DISPATCHER_SERVLET_BEAN_NAME);
|
||||
|
||||
}
|
||||
|
||||
private static ConditionOutcome checkServletRegistrations(
|
||||
ConfigurableListableBeanFactory beanFactory) {
|
||||
|
||||
List<String> registrations = Arrays.asList(beanFactory.getBeanNamesForType(
|
||||
ServletRegistrationBean.class, false, false));
|
||||
boolean containsDispatcherRegistrationBean = beanFactory
|
||||
.containsBean(DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME);
|
||||
|
||||
if (registrations.isEmpty()) {
|
||||
if (containsDispatcherRegistrationBean) {
|
||||
return ConditionOutcome
|
||||
.noMatch("found no ServletRegistrationBean but a non-ServletRegistrationBean named "
|
||||
+ DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME);
|
||||
}
|
||||
return ConditionOutcome.match("no ServletRegistrationBean found");
|
||||
}
|
||||
|
||||
if (registrations.contains(DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME)) {
|
||||
return ConditionOutcome.noMatch("found ServletRegistrationBean named "
|
||||
+ DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME);
|
||||
}
|
||||
if (containsDispatcherRegistrationBean) {
|
||||
return ConditionOutcome.noMatch("found non-ServletRegistrationBean named "
|
||||
+ DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME);
|
||||
}
|
||||
|
||||
return ConditionOutcome
|
||||
.match("one or more ServletRegistrationBeans is found and none is named "
|
||||
+ DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ package org.springframework.boot.autoconfigure.web;
|
|||
import javax.servlet.MultipartConfigElement;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.springframework.beans.factory.UnsatisfiedDependencyException;
|
||||
import org.springframework.boot.context.embedded.MultiPartConfigFactory;
|
||||
import org.springframework.boot.context.embedded.ServletRegistrationBean;
|
||||
import org.springframework.boot.test.EnvironmentTestUtils;
|
||||
|
|
@ -69,6 +70,23 @@ public class DispatcherServletAutoConfigurationTests {
|
|||
assertEquals(0, this.context.getBeanNamesForType(DispatcherServlet.class).length);
|
||||
}
|
||||
|
||||
// If you override either the dispatcherServlet or its registration you have to
|
||||
// provide both...
|
||||
@Test(expected = UnsatisfiedDependencyException.class)
|
||||
public void registrationOverrideWithAutowiredServlet() throws Exception {
|
||||
this.context = new AnnotationConfigWebApplicationContext();
|
||||
this.context.register(CustomAutowiredRegistration.class,
|
||||
ServerPropertiesAutoConfiguration.class,
|
||||
DispatcherServletAutoConfiguration.class);
|
||||
this.context.setServletContext(new MockServletContext());
|
||||
this.context.refresh();
|
||||
ServletRegistrationBean registration = this.context
|
||||
.getBean(ServletRegistrationBean.class);
|
||||
assertEquals("[/foo]", registration.getUrlMappings().toString());
|
||||
assertEquals("customDispatcher", registration.getServletName());
|
||||
assertEquals(1, this.context.getBeanNamesForType(DispatcherServlet.class).length);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void servletPath() throws Exception {
|
||||
this.context = new AnnotationConfigWebApplicationContext();
|
||||
|
|
@ -121,4 +139,16 @@ public class DispatcherServletAutoConfigurationTests {
|
|||
}
|
||||
}
|
||||
|
||||
@Configuration
|
||||
protected static class CustomAutowiredRegistration {
|
||||
@Bean
|
||||
public ServletRegistrationBean dispatcherServletRegistration(
|
||||
DispatcherServlet dispatcherServlet) {
|
||||
ServletRegistrationBean registration = new ServletRegistrationBean(
|
||||
dispatcherServlet, "/foo");
|
||||
registration.setName("customDispatcher");
|
||||
return registration;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue