springboot_流程分析

Posted songfahzun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot_流程分析相关的知识,希望对你有一定的参考价值。

springboot的两种启动方式

1

ConfigurableApplicationContext context = SpringApplication.run(Springboot10Application.class, args);

源码

public static ConfigurableApplicationContext run(Object source, String... args) {
        return run(new Object[] { source }, args);
    }

public static ConfigurableApplicationContext run(Object[] sources, String[] args) {
        return new SpringApplication(sources).run(args);
    }

最后还是new了一个SpringApplication.调用了run方法.

2

SpringApplication application=new SpringApplication(Springboot10Application.class);
ConfigurableApplicationContext context = application.run(args);

 

这两种方式其实是一样的

这是一个构造器,有一个可变参数列表:源

 

    public SpringApplication(Object... sources) {
        initialize(sources);
    }

构造器调用了initialize方法,把可变参数列表传过去了

定义了一个变量

private final Set<Object> sources = new LinkedHashSet<Object>();
private boolean webEnvironment;//定义是不是web环境

 

 

 

private void initialize(Object[] sources) {
        if (sources != null && sources.length > 0) {
        //判断这个source不为空的话就把这个source转为list后加入到set中去
this.sources.addAll(Arrays.asList(sources)); }
     //判断是不是web环境
this.webEnvironment = deduceWebEnvironment();
     // setInitializers((Collection) getSpringFactoriesInstances( ApplicationContextInitializer.
class)); setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class)); this.mainApplicationClass = deduceMainApplicationClass(); }

//判断是不是web环境

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

当这两个类都存在的时候就是web环境

private boolean deduceWebEnvironment() {
        for (String className : WEB_ENVIRONMENT_CLASSES) {
            if (!ClassUtils.isPresent(className, null)) {
                return false;
            }
        }
        return true;
    }

 




以上是关于springboot_流程分析的主要内容,如果未能解决你的问题,请参考以下文章

springboot启动流程构造SpringApplication实例对象

Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段

Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段

SpringBoot自动装配流程源码分析

SpringBoot启动流程分析:SpringBoot自动装配原理实现

SpringBoot 高级 原理分析 -- SpringBoot启动流程分析