欢迎光临散文网 会员登陆 & 注册

史上最完整的Spring启动流程

2023-03-29 14:02 作者:仲夏七月梦  | 我要投稿
  • 首先启动类使用了@SpringBootApplication注解,这个复合注解包括了@EnableAutoConfiguration 、@SpringBootConfiguration和@ComponentScan三个注解,@SpringBootConfiguration是标注当前类是一个配置类并注入到IOC容器中,而@ComponentScan是扫描指定路径下带有特定注解的类到IOC容器中。最为重要的是@EnableAutoConfiguration,它能通过ImportSelector选择器将所有带有@Configuration自动导入到容器里。
  • 注解完成后,通过运行SpringApplication的run方法完成服务构建、环境准备、容器创建、填充容器四项工作。
  • 服务构建需要在SpringApplication的构造器中完成①加载资源加载器、主方法类到内存中,②判定web应用类型是否存在并默认为servlet,③确定web服务器后就要加载初始化类了,这里是通过META-INFO/spring.factories来读取启动注册初始化器、应用上下文初始化器、应用监听器三类配置,当然,这里也可以对自定义三类配置,④通过运行时栈判断main方法所在的类是否为主启动类
  • 调用run方法进入环境准备阶段,主要是对容器和组件做一些前置操作。①先创建一个启动上下文。并逐一调用刚刚加载的启动注册初始化器的一个初始化方法 ②接下来设置awt.headLess=true表示缺少显示器、键盘等设备也可正常启动 ③启动运行监听器,同时发布启动事件,获取并加载spring.factories中的事件发布运行监听器,并且会将应用监听器也一并引入,以后想要在启动流程过程中加入自定义逻辑就只需要监听这些事件 ④通过prepareEnvironment方法组装启动参数,根据不同的web构造不同的环境。构造完毕后会加载环境变量、jvm系统属性到属性集合中,后期无需加载。此时可设置启动参数并添加configuration.properties到属性集合中。接下来会发布环境准备完成的事件,一些监听器收到信号会做相应处理。⑤可做忽略元数据加载、打印banner的操作。
  • 环境准备好以后,就可以创建容器了。①首先创建注解配置servlet容器,具体行为是创建beanfactory、用来解析一些注解的后置处理器和其他属性对象 ③调用prepareContext方法对容器中的属性进行初始化
  • 容器创建完毕后,就会对容器做初始化操作。这里会①创建系统自带的Bean和用户自定义Bean并装配到容器里,通过启动tomcat和经历Bean的生命周期就可以使用一个完整的Bean了 ②发布启动事件完成的同时,会回调自定义Runner接口来处理定制化需求


这十分钟的视频,我做笔记可是远超10分钟

史上最完整的Spring启动流程的评论 (共 条)

分享到微博请遵守国家法律