在正常情况下,当应用程序启动时,在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();
}
暂无答案!
目前还没有任何答案,快来回答吧!