spring boot 怎么选择启动web类型

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tszxlzc/article/details/87965920
  1. 从springApplication构造方法开始
@SuppressWarnings({ "unchecked", "rawtypes" })
	public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {
		this.resourceLoader = resourceLoader;
		Assert.notNull(primarySources, "PrimarySources must not be null");
		this.primarySources = new LinkedHashSet<>(Arrays.asList(primarySources));
		// 调用WebApplicationType的静态方法deduceFromClasspath来选择启动的web应用类型
		this.webApplicationType = WebApplicationType.deduceFromClasspath();
		setInitializers((Collection) getSpringFactoriesInstances(
				ApplicationContextInitializer.class));
		setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
		this.mainApplicationClass = deduceMainApplicationClass();
	}
  1. 看一下WebApplicationType.deduceFromClasspath()方法是怎么选的应用类型的
static WebApplicationType deduceFromClasspath() {
     //优先使用webflux类型
		if (ClassUtils.isPresent(WEBFLUX_INDICATOR_CLASS, null)
				&& !ClassUtils.isPresent(WEBMVC_INDICATOR_CLASS, null)
				&& !ClassUtils.isPresent(JERSEY_INDICATOR_CLASS, null)) {
			return WebApplicationType.REACTIVE;
		}
		// 不在SERVLET_INDICATOR_CLASSES类数组中时,web类型为NONE
		for (String className : SERVLET_INDICATOR_CLASSES) {
			if (!ClassUtils.isPresent(className, null)) {
				return WebApplicationType.NONE;
			}
		}
		//SERVLET 类型
		return WebApplicationType.SERVLET;
	}

SERVLET_INDICATOR_CLASSES数组里面的是什么类

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

猜你喜欢

转载自blog.csdn.net/tszxlzc/article/details/87965920
今日推荐