其他分享
首页 > 其他分享> > WebApplicationType

WebApplicationType

作者:互联网

一 web应用程序类型的枚举

public enum WebApplicationType {

/*
* 该应用程序不应作为Web应用程序运行,也不应启动嵌入式Web服务器
*/     NONE,       

/**
* 默认springboot启动上下文类型就是servlet
* .
*/

  
    SERVLET,
    
/*
* 该应用程序应作为反应式Web应用程序运行,并应启动嵌入式反应式Web服务器
*/ 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.servlet.ServletContainer"; 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";   

/*
   * 根据默认的路径,判断当前web类型,springboot启动调用的就是这个方法
*/
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; }
   /*
   * 根据class,判断当前web类型
*/

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; }   
   /*
   * 根据target生成class判断传入的type是否与生成的class相同
*/

private static boolean isAssignable(String target, Class<?> type) { try { return ClassUtils.resolveClassName(target, null).isAssignableFrom(type); } catch (Throwable ex) { return false; } } }

 

标签:web,INDICATOR,String,WebApplicationType,static,CLASS
来源: https://www.cnblogs.com/kjcc/p/14239637.html