简述SpringApplication执行流程

本文详细解析了SpringBoot启动流程,包括SpringApplication的初始化、自动配置加载、ApplicationContext创建及刷新等关键步骤,揭示了SpringBoot如何快速搭建应用的内部机制。
摘要由CSDN通过智能技术生成
  • @Configuration(@SpringBootConfiguration点开查看发现里面还是应用了@Configuration) 

            是一个IoC容器的配置类

  • @EnableAutoConfiguration

               @EnableAutoConfiguration也是借助@Import的帮助,将所有符合自动配置条件的bean定义加载到IoC容器

  • @ComponentScan

           @ComponentScan的功能其实就是自动扫描并加载符合条件的组件

 

SpringApplication执行流程:

1) 使用的是SpringApplication的静态run方法,那么,这个方法里面首先要创建一个SpringApplication对象实例,然后调用这个创建好的SpringApplication的实例方法。在SpringApplication实例初始化的时候,会对SpringApplication实例初始化完成并且完成设置

2)开始执行run方法的逻辑了,方法执行伊始,首先遍历执行所有通过SpringFactoriesLoader可以查找到并加载的SpringApplicationRunListener。调用它们的started()方法,告诉这些SpringApplicationRunListener,“嘿,SpringBoot应用要开始执行咯!”。

3)创建并配置当前Spring Boot应用将要使用的Environment

4)遍历调用所有SpringApplicationRunListener的environmentPrepared()的方法,告诉他们:“当前SpringBoot应用使用的Environment准备好了咯!”

5) 如果SpringApplication的showBanner属性被设置为true,则打印banner

6)根据用户是否明确设置了applicationContextClass类型以及初始化阶段的推断结果,决定该为当前SpringBoot应用创建什么类型的ApplicationContext并创建完成,然后根据条件决定是否添加ShutdownHook,决定是否使用自定义的BeanNameGenerator,决定是否使用自定义的ResourceLoader,当然,最重要的,将之前准备好的Environment设置给创建好的ApplicationContext使用

7) ApplicationContext创建好之后,SpringApplication会再次借助Spring-FactoriesLoader,查找并加载classpath中所有可用的ApplicationContext-Initializer,然后遍历调用这些ApplicationContextInitializer的initialize(applicationContext)方法来对已经创建好的ApplicationContext进行进一步的处理。

8) 遍历调用所有SpringApplicationRunListener的contextPrepared()方法。

9) 最核心的一步,将之前通过@EnableAutoConfiguration获取的所有配置以及其他形式的IoC容器配置加载到已经准备完毕的ApplicationContext。

10) 遍历调用所有SpringApplicationRunListener的contextLoaded()方法。

11) 调用ApplicationContext的refresh()方法,完成IoC容器可用的最后一道工序。

12) 查找当前ApplicationContext中是否注册有CommandLineRunner,如果有,则遍历执行它们。

13) 正常情况下,遍历执行SpringApplicationRunListener的finished()方法、(如果整个过程出现异常,则依然调用所有SpringApplicationRunListener的finished()方法,只不过这种情况下会将异常信息一并传入处理)

 

 

MyBatis的执行流程可以简述为以下几个步骤: 1. 创建SqlSession对象:在使用MyBatis时,首先需要通过SqlSessionFactory创建SqlSession对象,SqlSession是MyBatis的核心对象,它提供了操作数据库的方法。 2. 获取Mapper接口:通过SqlSession的getMapper方法获取Mapper接口的代理对象。Mapper接口定义了访问数据库的方法。 3. 执行SQL语句:通过调用Mapper接口的方法执行SQL语句,MyBatis会根据Mapper接口的方法名和参数,动态生成对应的SQL语句,并将其发送至执行器进行执行。 4. 执行器的选择:MyBatis的执行器根据配置文件中的设置来选择使用的执行器,一共有三个实现子类:SimpleExecutor(简单执行器)、ReuseExecutor(重用执行器)和BatchExecutor(批处理执行器)。 5. 缓存的维护:MyBatis提供了一级缓存和二级缓存来提高性能,执行器会负责缓存的维护。一级缓存是SqlSession级别的缓存,二级缓存是SqlSessionFactory级别的缓存。 6. 返回结果:执行SQL语句后,执行器会将结果封装成Java对象返回给调用者。 综上所述,MyBatis的执行流程包括创建SqlSession对象、获取Mapper接口、执行SQL语句、执行器的选择、缓存的维护和返回结果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [mybatis 之 执行流程](https://blog.csdn.net/u012391423/article/details/118559651)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [MyBatis-执行流程简介](https://blog.csdn.net/weixin_62427168/article/details/127573281)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值