mirror of
https://github.com/spring-projects/spring-boot.git
synced 2024-09-03 04:26:12 +08:00
Merge '2.0.x'
This commit is contained in:
commit
5c7a4523ea
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2017 the original author or authors.
|
||||
* Copyright 2012-2018 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2017 the original author or authors.
|
||||
* Copyright 2012-2018 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2017 the original author or authors.
|
||||
* Copyright 2012-2018 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2017 the original author or authors.
|
||||
* Copyright 2012-2018 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2017 the original author or authors.
|
||||
* Copyright 2012-2018 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2017 the original author or authors.
|
||||
* Copyright 2012-2018 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -167,12 +167,9 @@ public class SpringApplication {
|
||||
* The class name of application context that will be used by default for web
|
||||
* environments.
|
||||
*/
|
||||
public static final String DEFAULT_WEB_CONTEXT_CLASS = "org.springframework.boot."
|
||||
public static final String DEFAULT_SERVLET_WEB_CONTEXT_CLASS = "org.springframework.boot."
|
||||
+ "web.servlet.context.AnnotationConfigServletWebServerApplicationContext";
|
||||
|
||||
private static final String[] WEB_ENVIRONMENT_CLASSES = { "javax.servlet.Servlet",
|
||||
"org.springframework.web.context.ConfigurableWebApplicationContext" };
|
||||
|
||||
/**
|
||||
* The class name of application context that will be used by default for reactive web
|
||||
* environments.
|
||||
@ -180,14 +177,6 @@ public class SpringApplication {
|
||||
public static final String DEFAULT_REACTIVE_WEB_CONTEXT_CLASS = "org.springframework."
|
||||
+ "boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext";
|
||||
|
||||
private static final String REACTIVE_WEB_ENVIRONMENT_CLASS = "org.springframework."
|
||||
+ "web.reactive.DispatcherHandler";
|
||||
|
||||
private static final String MVC_WEB_ENVIRONMENT_CLASS = "org.springframework."
|
||||
+ "web.servlet.DispatcherServlet";
|
||||
|
||||
private static final String JERSEY_WEB_ENVIRONMENT_CLASS = "org.glassfish.jersey.server.ResourceConfig";
|
||||
|
||||
/**
|
||||
* Default banner location.
|
||||
*/
|
||||
@ -273,27 +262,13 @@ public class SpringApplication {
|
||||
this.resourceLoader = resourceLoader;
|
||||
Assert.notNull(primarySources, "PrimarySources must not be null");
|
||||
this.primarySources = new LinkedHashSet<>(Arrays.asList(primarySources));
|
||||
this.webApplicationType = deduceWebApplicationType();
|
||||
this.webApplicationType = WebApplicationType.deduceFromClasspath();
|
||||
setInitializers((Collection) getSpringFactoriesInstances(
|
||||
ApplicationContextInitializer.class));
|
||||
setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
|
||||
this.mainApplicationClass = deduceMainApplicationClass();
|
||||
}
|
||||
|
||||
private WebApplicationType deduceWebApplicationType() {
|
||||
if (ClassUtils.isPresent(REACTIVE_WEB_ENVIRONMENT_CLASS, null)
|
||||
&& !ClassUtils.isPresent(MVC_WEB_ENVIRONMENT_CLASS, null)
|
||||
&& !ClassUtils.isPresent(JERSEY_WEB_ENVIRONMENT_CLASS, null)) {
|
||||
return WebApplicationType.REACTIVE;
|
||||
}
|
||||
for (String className : WEB_ENVIRONMENT_CLASSES) {
|
||||
if (!ClassUtils.isPresent(className, null)) {
|
||||
return WebApplicationType.NONE;
|
||||
}
|
||||
}
|
||||
return WebApplicationType.SERVLET;
|
||||
}
|
||||
|
||||
private Class<?> deduceMainApplicationClass() {
|
||||
try {
|
||||
StackTraceElement[] stackTrace = new RuntimeException().getStackTrace();
|
||||
@ -609,7 +584,7 @@ public class SpringApplication {
|
||||
try {
|
||||
switch (this.webApplicationType) {
|
||||
case SERVLET:
|
||||
contextClass = Class.forName(DEFAULT_WEB_CONTEXT_CLASS);
|
||||
contextClass = Class.forName(DEFAULT_SERVLET_WEB_CONTEXT_CLASS);
|
||||
break;
|
||||
case REACTIVE:
|
||||
contextClass = Class.forName(DEFAULT_REACTIVE_WEB_CONTEXT_CLASS);
|
||||
@ -1187,38 +1162,16 @@ public class SpringApplication {
|
||||
|
||||
/**
|
||||
* Sets the type of Spring {@link ApplicationContext} that will be created. If not
|
||||
* specified defaults to {@link #DEFAULT_WEB_CONTEXT_CLASS} for web based applications
|
||||
* or {@link AnnotationConfigApplicationContext} for non web based applications.
|
||||
* specified defaults to {@link #DEFAULT_SERVLET_WEB_CONTEXT_CLASS} for web based
|
||||
* applications or {@link AnnotationConfigApplicationContext} for non web based
|
||||
* applications.
|
||||
* @param applicationContextClass the context class to set
|
||||
*/
|
||||
public void setApplicationContextClass(
|
||||
Class<? extends ConfigurableApplicationContext> applicationContextClass) {
|
||||
this.applicationContextClass = applicationContextClass;
|
||||
this.webApplicationType = deduceWebApplicationType(applicationContextClass);
|
||||
}
|
||||
|
||||
private WebApplicationType deduceWebApplicationType(
|
||||
Class<?> applicationContextClass) {
|
||||
if (safeIsAssignableFrom("org.springframework.web.context.WebApplicationContext",
|
||||
applicationContextClass)) {
|
||||
return WebApplicationType.SERVLET;
|
||||
}
|
||||
if (safeIsAssignableFrom(
|
||||
"org.springframework.boot.web.reactive.context.ReactiveWebApplicationContext",
|
||||
applicationContextClass)) {
|
||||
return WebApplicationType.REACTIVE;
|
||||
}
|
||||
return WebApplicationType.NONE;
|
||||
}
|
||||
|
||||
private boolean safeIsAssignableFrom(String target, Class<?> type) {
|
||||
try {
|
||||
Class<?> targetClass = ClassUtils.forName(target, getClassLoader());
|
||||
return targetClass.isAssignableFrom(type);
|
||||
}
|
||||
catch (Throwable ex) {
|
||||
return false;
|
||||
}
|
||||
this.webApplicationType = WebApplicationType
|
||||
.deduceFromApplicationContext(applicationContextClass);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2017 the original author or authors.
|
||||
* Copyright 2012-2018 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -16,6 +16,8 @@
|
||||
|
||||
package org.springframework.boot;
|
||||
|
||||
import org.springframework.util.ClassUtils;
|
||||
|
||||
/**
|
||||
* An enumeration of possible types of web application.
|
||||
*
|
||||
@ -41,6 +43,55 @@ public enum WebApplicationType {
|
||||
* The application should run as a reactive web application and should start an
|
||||
* embedded reactive web server.
|
||||
*/
|
||||
REACTIVE
|
||||
REACTIVE;
|
||||
|
||||
private static final String[] SERVLET_INDICATOR_CLASSES = { "javax.servlet.Servlet",
|
||||
"org.springframework.web.context.ConfigurableWebApplicationContext" };
|
||||
|
||||
private static final String WEBMVC_INDICATOR_CLASS = "org.springframework."
|
||||
+ "web.servlet.DispatcherServlet";
|
||||
|
||||
private static final String WEBFLUX_INDICATOR_CLASS = "org."
|
||||
+ "springframework.web.reactive.DispatcherHandler";
|
||||
|
||||
private static final String JERSEY_INDICATOR_CLASS = "org.glassfish.jersey.server.ResourceConfig";
|
||||
|
||||
private static final String SERVLET_APPLICATION_CONTEXT_CLASS = "org.springframework.web.context.WebApplicationContext";
|
||||
|
||||
private static final String REACTIVE_APPLICATION_CONTEXT_CLASS = "org.springframework.boot.web.reactive.context.ReactiveWebApplicationContext";
|
||||
|
||||
static WebApplicationType deduceFromClasspath() {
|
||||
if (ClassUtils.isPresent(WEBFLUX_INDICATOR_CLASS, null)
|
||||
&& !ClassUtils.isPresent(WEBMVC_INDICATOR_CLASS, null)
|
||||
&& !ClassUtils.isPresent(JERSEY_INDICATOR_CLASS, null)) {
|
||||
return WebApplicationType.REACTIVE;
|
||||
}
|
||||
for (String className : SERVLET_INDICATOR_CLASSES) {
|
||||
if (!ClassUtils.isPresent(className, null)) {
|
||||
return WebApplicationType.NONE;
|
||||
}
|
||||
}
|
||||
return WebApplicationType.SERVLET;
|
||||
}
|
||||
|
||||
static WebApplicationType deduceFromApplicationContext(
|
||||
Class<?> applicationContextClass) {
|
||||
if (isAssignable(SERVLET_APPLICATION_CONTEXT_CLASS, applicationContextClass)) {
|
||||
return WebApplicationType.SERVLET;
|
||||
}
|
||||
if (isAssignable(REACTIVE_APPLICATION_CONTEXT_CLASS, applicationContextClass)) {
|
||||
return WebApplicationType.REACTIVE;
|
||||
}
|
||||
return WebApplicationType.NONE;
|
||||
}
|
||||
|
||||
private static boolean isAssignable(String target, Class<?> type) {
|
||||
try {
|
||||
return ClassUtils.resolveClassName(target, null).isAssignableFrom(type);
|
||||
}
|
||||
catch (Throwable ex) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user