springboot web - 启动(1) 创建SpringApplication(springboot面试题)

网友投稿 248 2022-06-21


一. 测试代码

@SpringBootApplication

public class SbmvcApplication {

public static void main(String[] args) {

SpringApplication.run(SbmvcApplication.class, args);

}

}

此处我的springboot 版本是 2.0.3.RELEASE

二. 调试

1. 创建 SpringApplication

deduceWebApplicationType()

从这里看, 程序分为3中运行环境,

NONE : 非 web 的运行环境

SERVLET : 普通 web 的运行环境

REACTIVE : 响应式 web 的运行环境

这里主要看的是  SERVLET  启动.

getSpringFactoriesInstances()

这里主要看一下 SpringFactoriesLoader.loadFactoryNames() 方法

看到这, 能明白, 是在加载  META-INF/spring.factories 文件中的配置.

key 就是传入类的引用, value 是配置的值, 多个值之间用英文逗号隔开, 如:

deduceMainApplicationClass()

这里调用了非java代码, 跟踪不了具体执行过程, 但是从结果看, 拿到的是 SbmvcApplication 类

总结

在创建 SpringApplication 的时候, 干了以下几件事情:

1. 判断了运行环境类型为 SERVLET

2. 加载了 spring.factories 文件中的 ApplicationContextInitializer 配置到 this.initializers 属性中 - 6个初始化器

3. 加载了 spring.factories 文件中的 ApplicationListener 配置 到 this.listeners 属性中 - 10个监听器

4. 拿到入口类SbmvcApplication , 放入 this.mainApplicationClass 属性中.


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringMVC:Controller 及 RestFul风格(springmvccontrolleradvice不起作用)
下一篇:springboot web - 启动(2) run()
相关文章

 发表评论

暂时没有评论,来抢沙发吧~