Spring Boot技术内幕:架构设计与实现原理
上QQ阅读APP看书,第一时间看更新

3.1 SpringApplication的初始化简介

在入口类中主要通过SpringApplication的静态方法——run方法进行SpringApplication类的实例化操作,然后再针对实例化对象调用另外一个run方法来完成整个项目的初始化和启动。本章重点围绕此过程的前半部部分(即SpringApplication类的实例化)来讲解。


public class SpringApplication {
    ...
    public static ConfigurableApplicationContext run(Class<?> primarySource,
        String... args) {
    return run(new Class<?>[] { primarySource }, args);
}
public static ConfigurableApplicationContext run(Class<?>[] primarySources,
        String[] args) {
        // 创建SpringApplication对象并执行其run方法
        return new SpringApplication(primarySources).run(args);
    }
    ...
}

通过入口类的方法进入,可以看到SpringApplication的实例化只是在它提供的静态run方法中新建了一个SpringApplication对象。其中参数primarySources为加载的主要资源类,通常就是Spring Boot的入口类,args为传递给应用程序的参数信息。

借鉴SpringApplication内部run方法的实现,我们也可以直接新建一个SpringApplication对象,并调用其run方法。因此,启动程序也可以如此来写:


@SpringBootApplication
public class SpringLearnApplication {
    public static void main(String[] args) {
        new SpringApplication(SpringLearnApplication.class).run(args);
    }
}

这样写程序的一个好处便是,可以通过SpringApplication提供的一些方法(setXX或addXX方法)来进行指定功能的定制化设置。

下面将重点围绕SpringApplication类的实例化展开。