一般我们会这么写springboot的启动类
这个类需要注意的是有两点,一个是@SpringBootApplication注解,还有就是run方法。
1、@SpringBootApplication注解 点进注解进入后,看到的情况如下1.1@ComponentScan 是熟悉的包扫描,因为默认是没有配置的,所以spring框架实现会从当前类的包下进行扫码 1.2 @EnableAutoConfiguration 借助@import的支持,收集和注册特定场景的相关bean 1.3 @SpringBootConfiguration 标注当前是配置类,并且注入到spring容器中去 二、接着run()方法 1、创建实例如下
2、run()具体逻辑 2.1如下图所示
首先解析classpath中是否存在特定类型,来决定是否应该创建相关类型。
从classpath获取相关参数
从SpringFactories获取所有的ApplicationContextInitializer实例
从SpringFactories获取所有的ApplicationListener实例
推断并设置main方法的定义类
2.2 获取 2.2.1 获取runListerners,并且开始监听事件 2.2.2 准备启动环境 2.2.3 使用打印printer 2.2.4 根据初始化阶段判断用户是否设置了applicationContextClass,决定生成什么类型的ApplicationContext 2.2.5 根据之前@EnableAutoConfiguration获取的bean加载到ApplicationContext中去。 2.2.6 listeners 加载contextLoaded方法 2.2.7调用refresh(),完成最后一套工序 2.2.8 所有的监听器发布context事件


