Home / Type/ WebApplicationType Type — spring-boot Architecture

WebApplicationType Type — spring-boot Architecture

Architecture documentation for the WebApplicationType type/interface in WebApplicationType.java from the spring-boot codebase.

Entity Profile

Source Code

core/spring-boot/src/main/java/org/springframework/boot/WebApplicationType.java lines 35–116

public enum WebApplicationType {

	/**
	 * The application should not run as a web application and should not start an
	 * embedded web server.
	 */
	NONE,

	/**
	 * The application should run as a servlet-based web application and should start an
	 * embedded servlet web server.
	 */
	SERVLET,

	/**
	 * The application should run as a reactive web application and should start an
	 * embedded reactive web server.
	 */
	REACTIVE;

	private static final String[] SERVLET_INDICATOR_CLASSES = { "jakarta.servlet.Servlet",
			"org.springframework.web.context.ConfigurableWebApplicationContext" };

	/**
	 * Deduce the {@link WebApplicationType} from the current classpath.
	 * @return the deduced web application
	 * @since 4.0.1
	 */
	public static WebApplicationType deduce() {
		for (Deducer deducer : SpringFactoriesLoader.forDefaultResourceLocation().load(Deducer.class)) {
			WebApplicationType deduced = deducer.deduceWebApplicationType();
			if (deduced != null) {
				return deduced;
			}
		}
		return isServletApplication() ? WebApplicationType.SERVLET : WebApplicationType.NONE;
	}

	private static boolean isServletApplication() {
		for (String servletIndicatorClass : SERVLET_INDICATOR_CLASSES) {
			if (!ClassUtils.isPresent(servletIndicatorClass, null)) {
				return false;
			}
		}
		return true;
	}

	static class WebApplicationTypeRuntimeHints implements RuntimeHintsRegistrar {

		@Override
		public void registerHints(RuntimeHints hints, @Nullable ClassLoader classLoader) {
			for (String servletIndicatorClass : SERVLET_INDICATOR_CLASSES) {
				registerTypeIfPresent(servletIndicatorClass, classLoader, hints);
			}
		}

		private void registerTypeIfPresent(String typeName, @Nullable ClassLoader classLoader, RuntimeHints hints) {
			if (ClassUtils.isPresent(typeName, classLoader)) {
				hints.reflection().registerType(TypeReference.of(typeName));
			}
		}

	}

	/**
	 * Strategy that may be implemented by a module that can deduce the
	 * {@link WebApplicationType}.
	 *
	 * @since 4.0.1
	 */
	@FunctionalInterface
	public interface Deducer {

		/**
		 * Deduce the web application type.
		 * @return the deduced web application type or {@code null}
		 */
		@Nullable WebApplicationType deduceWebApplicationType();

	}

}

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free