Mr. Cappuccino的第23杯咖啡——金三银四面试题之SpringBoot篇

1. 什么是SpringBoot?
  1. 能够帮助开发者快速整合第三方框架(Spring、Mybatis、hibernate),原理:Maven依赖封装整合和自定义starter;
  2. 完全去除XML配置,采用注解形式(自动配置),原理:SpringBoot根据Spring体系原生的注解实现包装;
  3. 不需要外部容器,内嵌服务器(Tomcat),原理:Java语言创建Tomcat服务器,然后将本地class文件交给Tomcat加载。
2. SpringBoot自动配置的原理是什么?

在Spring程序main方法中,添加@SpringBootApplication或者@EnableAutoConfiguration会自动去maven中读取每个starter中的spring.gfactories文件,该文件中配置了所有需要被创建的Spring容器中的bean。(SPI机制)

3. SpringBoot的核心注解是哪些?他主要由哪几个注解组成?

启动类上面的注解是@SpringBootApplication,它是SpringBoot的核心注解,主要组合包含了以下3个注解:

  1. @SpringBootConfiguration:组合了@Configuration注解,实现配置文件的功能;
  2. @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项;
  3. @ComponentScan:Spring组件扫描。
4. 谈谈SpringBoot的启动流程?

核心分为两个步骤:

  1. 创建SpringApplication对象;
  2. 调用run()方法实现启动同时返回当前的容器上下文;

具体流程:

  1. 创建SpringApplication对象,初始化SpringBoot容器;
  2. 获取当前应用启动类型,原理:判断当前classpath是否有加载servlet类,如果有,则返回servlet web启动方式。webApplicationType分为三种类型:响应式启动(Spring5新特性)、None不会嵌入web容器启动 (将SpringBoot项目放入外部服务器运行)、SERVLET 基于Web容器启动;
  3. setInitializers():读取SpringBoot包下面的META-INF/spring.factories并获取到对应的ApplicationContextInitializer装配到集合中;
  4. setListeners():读取SpringBoot包下面的META-INF/spring.factories并获取到对应ApplicationListener装配到集合中;
  5. mainApplicationClass():获取当前运行的主函数;
  6. 调用run()方法实现启动;
  7. StopWatch stopWatch = new StopWatch(); 记录SpringBoot项目启动时间;
  8. getRunListeners(args); 读取SpringBoot包下面的META-INF/spring.factories并获取到对应SpringApplicationRunListeners装配到集合中;
  9. listeners.starting(); 循环调用监听starting方法;
  10. listeners.environmentPrepared(environment);读取配置文件到SpringBoot容器中
  11. Banner printedBanner = printBanner(environment); 打印SpringBoot Banner;
  12. 创建SpringBoot上下文AnnotationConfigServletWebServerApplicationContext对象;
  13. refreshContext(context); 刷新上下文;
  14. 创建tomcat容器;
  15. 加载SpringMVC;
  16. afterRefresh():定义一个空的模版给其他子类实现重写;
  17. listeners.started(context);使用广播和回调机制通知监听器SpringBoot容器启动成功;
  18. listeners.running(context); 使用广播和回调机制通知监听器SpringBoot容器正在运行;
  19. 最后,返回当前上下文
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值