ServletContextInitializerBeansTests Class — spring-boot Architecture
Architecture documentation for the ServletContextInitializerBeansTests class in ServletContextInitializerBeansTests.java from the spring-boot codebase.
Entity Profile
Source Code
core/spring-boot/src/test/java/org/springframework/boot/web/servlet/ServletContextInitializerBeansTests.java lines 58–476
class ServletContextInitializerBeansTests {
private @Nullable ConfigurableApplicationContext context;
@Test
void servletThatImplementsServletContextInitializerIsOnlyRegisteredOnce() {
load(ServletConfiguration.class);
ServletContextInitializerBeans initializerBeans = new ServletContextInitializerBeans(
getContext().getBeanFactory());
assertThat(initializerBeans).hasSize(1);
assertThat(initializerBeans.iterator()).toIterable().hasOnlyElementsOfType(TestServlet.class);
}
@Test
void filterThatImplementsServletContextInitializerIsOnlyRegisteredOnce() {
load(FilterConfiguration.class);
ServletContextInitializerBeans initializerBeans = new ServletContextInitializerBeans(
getContext().getBeanFactory());
assertThat(initializerBeans).hasSize(1);
assertThat(initializerBeans.iterator()).toIterable().hasOnlyElementsOfType(TestFilter.class);
}
@Test
void looksForInitializerBeansOfSpecifiedType() {
load(TestConfiguration.class);
ServletContextInitializerBeans initializerBeans = new ServletContextInitializerBeans(
getContext().getBeanFactory(), TestServletContextInitializer.class);
assertThat(initializerBeans).hasSize(1);
assertThat(initializerBeans.iterator()).toIterable().hasOnlyElementsOfType(TestServletContextInitializer.class);
}
@Test
void whenAnHttpSessionIdListenerBeanIsDefinedThenARegistrationBeanIsCreatedForIt() {
load(HttpSessionIdListenerConfiguration.class);
ServletContextInitializerBeans initializerBeans = new ServletContextInitializerBeans(
getContext().getBeanFactory());
assertThat(initializerBeans).hasSize(1);
assertThat(initializerBeans).first()
.isInstanceOf(ServletListenerRegistrationBean.class)
.extracting((initializer) -> ((ServletListenerRegistrationBean<?>) initializer).getListener())
.isInstanceOf(HttpSessionIdListener.class);
}
@Test
void classesThatImplementMultipleInterfacesAreRegisteredForAllOfThem() {
load(MultipleInterfacesConfiguration.class);
ServletContextInitializerBeans initializerBeans = new ServletContextInitializerBeans(
getContext().getBeanFactory());
assertThat(initializerBeans).hasSize(3);
assertThat(initializerBeans).element(0)
.isInstanceOf(ServletRegistrationBean.class)
.extracting((initializer) -> ((ServletRegistrationBean<?>) initializer).getServlet())
.isInstanceOf(TestServletAndFilterAndListener.class);
assertThat(initializerBeans).element(1)
.isInstanceOf(FilterRegistrationBean.class)
.extracting((initializer) -> ((FilterRegistrationBean<?>) initializer).getFilter())
.isInstanceOf(TestServletAndFilterAndListener.class);
assertThat(initializerBeans).element(2)
.isInstanceOf(ServletListenerRegistrationBean.class)
.extracting((initializer) -> ((ServletListenerRegistrationBean<?>) initializer).getListener())
.isInstanceOf(TestServletAndFilterAndListener.class);
}
@Test
@SuppressWarnings("unchecked")
void shouldApplyServletRegistrationAnnotation() {
load(ServletConfigurationWithAnnotation.class);
ServletContextInitializerBeans initializerBeans = new ServletContextInitializerBeans(
getContext().getBeanFactory(), TestServletContextInitializer.class);
assertThatSingleRegistration(initializerBeans, ServletRegistrationBean.class, (servletRegistrationBean) -> {
assertThat(servletRegistrationBean.isEnabled()).isFalse();
assertThat(servletRegistrationBean.getOrder()).isEqualTo(Ordered.LOWEST_PRECEDENCE);
assertThat(servletRegistrationBean.getServletName()).isEqualTo("test");
assertThat(servletRegistrationBean.isAsyncSupported()).isFalse();
assertThat(servletRegistrationBean.getUrlMappings()).containsExactly("/test/*");
assertThat(servletRegistrationBean.getInitParameters())
.containsExactlyInAnyOrderEntriesOf(Map.of("env", "test", "debug", "true"));
assertThat(servletRegistrationBean.getMultipartConfig()).isNotNull();
assertThat(servletRegistrationBean.getMultipartConfig().getLocation()).isEqualTo("/tmp");
assertThat(servletRegistrationBean.getMultipartConfig().getMaxFileSize()).isEqualTo(1024);
assertThat(servletRegistrationBean.getMultipartConfig().getMaxRequestSize()).isEqualTo(4096);
assertThat(servletRegistrationBean.getMultipartConfig().getFileSizeThreshold()).isEqualTo(128);
});
}
@Test
@SuppressWarnings("unchecked")
void shouldApplyFilterRegistrationAnnotation() {
load(FilterConfigurationWithAnnotation.class);
ServletContextInitializerBeans initializerBeans = new ServletContextInitializerBeans(
getContext().getBeanFactory(), TestServletContextInitializer.class);
assertThatSingleRegistration(initializerBeans, FilterRegistrationBean.class, (filterRegistrationBean) -> {
assertThat(filterRegistrationBean.isEnabled()).isFalse();
assertThat(filterRegistrationBean.getOrder()).isEqualTo(Ordered.LOWEST_PRECEDENCE);
assertThat(filterRegistrationBean.getFilterName()).isEqualTo("test");
assertThat(filterRegistrationBean.isAsyncSupported()).isFalse();
assertThat(filterRegistrationBean.isMatchAfter()).isTrue();
assertThat(filterRegistrationBean.getServletNames()).containsExactly("test");
assertThat(filterRegistrationBean.determineDispatcherTypes()).containsExactly(DispatcherType.ERROR);
assertThat(filterRegistrationBean.getUrlPatterns()).containsExactly("/test/*");
assertThat(filterRegistrationBean.getInitParameters())
.containsExactlyInAnyOrderEntriesOf(Map.of("env", "test", "debug", "true"));
Collection<ServletRegistrationBean<?>> servletRegistrationBeans = filterRegistrationBean
.getServletRegistrationBeans();
assertThat(servletRegistrationBeans).hasSize(1);
assertThat(servletRegistrationBeans.iterator().next().getServletName())
.isEqualTo("testServletRegistrationBean");
});
}
@Test
@SuppressWarnings("unchecked")
void shouldApplyFilterRegistrationAnnotationWithDefaultDispatcherTypes() {
load(FilterConfigurationWithAnnotationAndDefaultDispatcherTypes.class);
ServletContextInitializerBeans initializerBeans = new ServletContextInitializerBeans(
getContext().getBeanFactory(), TestServletContextInitializer.class);
assertThatSingleRegistration(initializerBeans, FilterRegistrationBean.class,
(filterRegistrationBean) -> assertThat(filterRegistrationBean.determineDispatcherTypes())
.containsExactlyElementsOf(EnumSet.allOf(DispatcherType.class)));
}
@Test
void shouldApplyOrderFromBean() {
load(OrderedServletConfiguration.class);
ServletContextInitializerBeans initializerBeans = new ServletContextInitializerBeans(
getContext().getBeanFactory(), TestServletContextInitializer.class);
assertThatSingleRegistration(initializerBeans, ServletRegistrationBean.class,
(servletRegistrationBean) -> assertThat(servletRegistrationBean.getOrder())
.isEqualTo(OrderedTestServlet.ORDER));
}
@Test
void shouldApplyOrderFromOrderAnnotationOnBeanMethod() {
load(ServletConfigurationWithAnnotationAndOrderAnnotation.class);
ServletContextInitializerBeans initializerBeans = new ServletContextInitializerBeans(
getContext().getBeanFactory(), TestServletContextInitializer.class);
assertThatSingleRegistration(initializerBeans, ServletRegistrationBean.class,
(servletRegistrationBean) -> assertThat(servletRegistrationBean.getOrder())
.isEqualTo(ServletConfigurationWithAnnotationAndOrderAnnotation.ORDER));
}
@Test
void orderedInterfaceShouldTakePrecedenceOverOrderAnnotation() {
load(OrderedServletConfigurationWithAnnotationAndOrder.class);
ServletContextInitializerBeans initializerBeans = new ServletContextInitializerBeans(
getContext().getBeanFactory(), TestServletContextInitializer.class);
assertThatSingleRegistration(initializerBeans, ServletRegistrationBean.class,
(servletRegistrationBean) -> assertThat(servletRegistrationBean.getOrder())
.isEqualTo(OrderedTestServlet.ORDER));
}
@Test
void shouldApplyOrderFromOrderAttribute() {
load(ServletConfigurationWithAnnotationAndOrder.class);
ServletContextInitializerBeans initializerBeans = new ServletContextInitializerBeans(
getContext().getBeanFactory(), TestServletContextInitializer.class);
assertThatSingleRegistration(initializerBeans, ServletRegistrationBean.class,
(servletRegistrationBean) -> assertThat(servletRegistrationBean.getOrder())
.isEqualTo(ServletConfigurationWithAnnotationAndOrder.ORDER));
}
private void load(Class<?>... configuration) {
this.context = new AnnotationConfigApplicationContext(configuration);
}
private <T extends RegistrationBean> void assertThatSingleRegistration(
ServletContextInitializerBeans initializerBeans, Class<T> clazz, ThrowingConsumer<T> code) {
assertThat(initializerBeans).hasSize(1);
ServletContextInitializer initializer = initializerBeans.iterator().next();
assertThat(initializer).isInstanceOf(clazz);
code.accept(clazz.cast(initializer));
}
private ConfigurableApplicationContext getContext() {
assertThat(this.context).isNotNull();
return this.context;
}
@Configuration(proxyBeanMethods = false)
static class ServletConfiguration {
@Bean
TestServlet testServlet() {
return new TestServlet();
}
}
@Configuration(proxyBeanMethods = false)
static class OrderedServletConfiguration {
@Bean
OrderedTestServlet testServlet() {
return new OrderedTestServlet();
}
}
@Configuration(proxyBeanMethods = false)
static class ServletConfigurationWithAnnotation {
@Bean
@ServletRegistration(enabled = false, name = "test", asyncSupported = false, urlMappings = "/test/*",
loadOnStartup = 1,
initParameters = { @WebInitParam(name = "env", value = "test"),
@WebInitParam(name = "debug", value = "true") },
multipartConfig = @MultipartConfig(location = "/tmp", maxFileSize = 1024, maxRequestSize = 4096,
fileSizeThreshold = 128))
TestServlet testServlet() {
return new TestServlet();
}
}
@Configuration(proxyBeanMethods = false)
static class ServletConfigurationWithAnnotationAndOrderAnnotation {
static final int ORDER = 7;
@Bean
@ServletRegistration(name = "test")
@Order(ORDER)
TestServlet testServlet() {
return new TestServlet();
}
}
@Configuration(proxyBeanMethods = false)
static class ServletConfigurationWithAnnotationAndOrder {
static final int ORDER = 9;
@Bean
@ServletRegistration(name = "test", order = ORDER)
TestServlet testServlet() {
return new TestServlet();
}
}
@Configuration(proxyBeanMethods = false)
static class OrderedServletConfigurationWithAnnotationAndOrder {
static final int ORDER = 5;
@Bean
@ServletRegistration
@Order(ORDER)
OrderedTestServlet testServlet() {
return new OrderedTestServlet();
}
}
@Configuration(proxyBeanMethods = false)
static class FilterConfiguration {
@Bean
TestFilter testFilter() {
return new TestFilter();
}
}
@Configuration(proxyBeanMethods = false)
static class FilterConfigurationWithAnnotation {
@Bean
@FilterRegistration(
enabled = false, name = "test", asyncSupported = false, dispatcherTypes = DispatcherType.ERROR,
matchAfter = true, servletNames = "test", urlPatterns = "/test/*", initParameters = {
@WebInitParam(name = "env", value = "test"), @WebInitParam(name = "debug", value = "true") },
servletClasses = { TestServlet.class })
TestFilter testFilter() {
return new TestFilter();
}
@Bean
ServletRegistrationBean<TestServlet> testServletRegistrationBean() {
return new ServletRegistrationBean<>(new TestServlet());
}
@Bean
ServletRegistrationBean<NonMatchingServlet> nonMatchingServletRegistrationBean() {
return new ServletRegistrationBean<>(new NonMatchingServlet());
}
static class NonMatchingServlet extends HttpServlet implements ServletContextInitializer {
@Override
public void onStartup(ServletContext servletContext) {
}
}
}
@Configuration(proxyBeanMethods = false)
static class FilterConfigurationWithAnnotationAndDefaultDispatcherTypes {
@Bean
@FilterRegistration(name = "test")
TestOncePerRequestFilter testFilter() {
return new TestOncePerRequestFilter();
}
static class TestOncePerRequestFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
FilterChain filterChain) {
}
}
}
@Configuration(proxyBeanMethods = false)
static class MultipleInterfacesConfiguration {
@Bean
TestServletAndFilterAndListener testServletAndFilterAndListener() {
return new TestServletAndFilterAndListener();
}
}
@Configuration(proxyBeanMethods = false)
static class TestConfiguration {
@Bean
TestServletContextInitializer testServletContextInitializer() {
return new TestServletContextInitializer();
}
@Bean
OtherTestServletContextInitializer otherTestServletContextInitializer() {
return new OtherTestServletContextInitializer();
}
}
@Configuration(proxyBeanMethods = false)
static class HttpSessionIdListenerConfiguration {
@Bean
HttpSessionIdListener httpSessionIdListener() {
return (event, oldId) -> {
};
}
}
static class TestServlet extends HttpServlet implements ServletContextInitializer {
@Override
public void onStartup(ServletContext servletContext) {
}
}
static class OrderedTestServlet extends HttpServlet implements ServletContextInitializer, Ordered {
static final int ORDER = 3;
@Override
public void onStartup(ServletContext servletContext) {
}
@Override
public int getOrder() {
return ORDER;
}
}
static class TestFilter implements Filter, ServletContextInitializer {
@Override
public void onStartup(ServletContext servletContext) {
}
@Override
public void init(FilterConfig filterConfig) {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
}
}
static class TestServletContextInitializer implements ServletContextInitializer {
@Override
public void onStartup(ServletContext servletContext) {
}
}
static class OtherTestServletContextInitializer implements ServletContextInitializer {
@Override
public void onStartup(ServletContext servletContext) {
}
}
}
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free