Skip to content

Latest commit

 

History

History
executable file
·
78 lines (39 loc) · 3.08 KB

11.Spring Boot.md

File metadata and controls

executable file
·
78 lines (39 loc) · 3.08 KB

11.Spring Boot

这里我找了一些个人感觉容易问到的面试题

什么是 Spring Boot?

Spring Boot是 Spring 的子项目,正如其名字,提供 Spring 的引导( Boot )的功能。

通过 Spring Boot ,我们开发者可以快速配置 Spring 项目,引入各种 Spring MVC、Spring Transaction、Spring AOP、MyBatis 等等框架,而无需不断重复编写繁重的 Spring 配置,降低了 Spring 的使用成本。

Spring Boot启动流程

  1. 启动类里面调用SpringApplication.run方法

  2. 在run方法中,首先构造SpringApplication对象,然后再调用run方法

  3. 在构造SpringApplication对象中,做了如下工作

    • 将sources放入primarySources变量中
    • 判断webApplication是什么类型的
    • 设置ApplicationContextInitializer,ApplicationListener,通过加载META-INF/spring.factories中配置的类
    • 找到main方法找到启动主类
  4. run方法中,做的工作

    • StopWatch主要是监控启动过程,统计启动时间,检测应用是否已经启动或者停止。

    • 加载SpringApplicationRunListener(也是通过META-INF/spring.factories),默认加载的是EventPublishingRunListener

    • 调用RunListener.starting()方法。

    • 根据args创建应用参数解析器ApplicationArguments;

    • 准备环境变量:获取环境变量environment,将应用参数放入到环境变量持有对象中,监听器监听环境变量对象的变化(listener.environmentPrepared)

    • 打印Banner信息(SpringBootBanner)

    • 创建SpringBoot的应用上下文(AnnotationConfigEmbeddedWebApplicationContext)

    • prepareContext上下文之前的准备

    • refreshContext刷新上下文

    • afterRefresh(ApplicationRunner,CommandLineRunner接口实现类的启动)

    • 返回上下文对象

Spring Boot启动的时候会加载哪些包?

在web项目中,会在Maven中配置 spring-boot-starter-web 包,该包中包含了spring-core、spring-content、servlet、tomcat、jackson、HikariCP、junit、jdbc、slf4j 等

如何重新加载 Spring Boot 上的更改,而无需重新启动服务器?

  • 【推荐】spring-boot-devtools 插件。注意,这个工具需要配置 IDEA 的自动编译。

  • Spring Loaded 插件。

    Spring Boot 2.X 后,官方宣布不再支持 Spring Loaded 插件 的更新,所以基本可以无视它了。

  • JRebel 插件,需要付费。

  • 使用插件化开发,插件化代码使用手动注册Bean的方式

关于如何使用 spring-boot-devtools 和 Spring Loaded 插件,可以看看 《Spring Boot 学习笔记:Spring Boot Developer Tools 与热部署》

什么是 Spring Boot 自动配置?

  1. Spring Boot 在启动时扫描项目所依赖的 jar 包,寻找包含spring.factories 文件的 jar 包。
  2. 根据 spring.factories 配置加载 AutoConfigure 类。
  3. 根据 @Conditional 等条件注解的条件,进行自动配置并将 Bean 注入 Spring IoC 中。

https://my.oschina.net/itsaysay/blog/3011826