为什么springboot框架通过抛出runtimeexception来推断应用程序主类?

bq9c1y66  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(241)

在正常情况下,当应用程序启动时,在main方法中调用springapplication的run方法,并将main方法所在的class对象作为参数传递。

public static void main(String[] args) {
       SpringApplication.run(BootApplication.class, args);
}

但是最近当我研究springboot启动过程时,我看到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));
        this.webApplicationType = WebApplicationType.deduceFromClasspath();
        setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));
        setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
        // deduce main Class
        this.mainApplicationClass = deduceMainApplicationClass();
    }

为什么spring不能通过类似于下面判断的方法直接获取主启动类,那么类对象示例呢?

if (primarySources.size == 1) {
    this.mainApplicationClass = primarySources.get(0);
}else {
    this.mainApplicationClass = deduceMainApplicationClass();
}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题