开始
SpringApplication.run(SampleController.class, args);
开始SpringApplication的初始化
public SpringApplication(Object... sources) {
//一些初始化,监听器,容器初始化
this.initialize(sources);
}
执行过程的方法
public ConfigurableApplicationContext run(String... args) {
//主要执行过程
}
springboot的banner图案就在上面的方法内被执行,打印到控制台
Banner printedBanner = this.printBanner(environment);
//生成context会判断是否在this.webEnvironment ?
context = this.createApplicationContext();
//根据环境打印
this.prepareContext(context, environment, listeners, applicationArguments, printedBanner);
上面的this.printBanner(environment);会取到banner实例,包含banner的字符
private Banner printBanner(ConfigurableEnvironment environment) {
if (this.bannerMode == Mode.OFF) {
return null;
} else {
ResourceLoader resourceLoader = this.resourceLoader != null ? this.resourceLoader : new DefaultResourceLoader(this.getClassLoader());
//SpringApplicationBannerPrinter的属性DEFAULT_BANNER就是SpringBootBanner类,SpringBootBanner的BANNER属性(字符数组)就是熟悉的控制台的banner图
SpringApplicationBannerPrinter bannerPrinter = new SpringApplicationBannerPrinter((ResourceLoader)resourceLoader, this.banner);
//bannerPrinter.print会调用this.getBanner方法取得bannner字符数组,打印
return this.bannerMode == Mode.LOG ? bannerPrinter.print(environment, this.mainApplicationClass, logger) : bannerPrinter.print(environment, this.mainApplicationClass, System.out);
}
}
最后展示一下熟悉的springboot控制台banner图
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.5.9.RELEASE)