谈一谈你对SpringBoot的理解,它有哪些特性(优点)?
SpringBoot用来快速开发Spring应用的一个脚手架,其目的是用来简化新Spring应用的初始搭建以及开发过程。
优点:
- 简化配置:提供了很多内置的starter结合自动配置对主流框架无配置集成、开箱即用。
- 自动配置:Spring Boot能根据当前类路径下的类、jar包来自动配置bean,如添加一个spring-boot-starterweb启动器就能拥有web的功能,无需其他配置。
- 无代码生成和XML配置:Spring Boot配置过程中无代码生成,也无需XML配置文件就能完成所有配置工作,这一切都是借助于条件注解完成的,这也是Spring4.x的核心功能之一。
- 独立运行:可以打包为一个独立的Jar文件,内置Tomcat服务器,可以直接启动web应用
- 依赖管理:管理了常用的第三方依赖的版本,减少了版本冲突问题
- 兼容性与扩展性:Spring Boot 基于 Spring 框架,继承了 Spring 的丰富生态系统,同时保持了极好的向后兼容性,适合长期项目开发。
Spring和SpringBoot的核心注解
-
**@SpringBootApplication:**这是 Spring Boot 应用的核心注解,通常放在主类上,用于标记一个主启动类。标识了一个SpringBoot工程,它是一个复合注解,包含了以下三个注解:
-
@SpringBootConfiguration
:相当于@Configuration
,表示这是一个配置类。 -
@EnableAutoConfiguration
:启用 Spring Boot 的自动配置机制,根据类路径中的依赖自动配置 Spring 应用。 -
@ComponentScan
:启用包扫描功能,扫描当前包及其子包中标注了@Component
、@Service
、@Repository
、@Controller
等注解的类。
2.**@Conditional:**与自动配置相关,允许根据某些条件有选择性地注册 Bean 或激活配置。例如,根据系统属性、环境变量等条件激活某些配置。
- @ConditionalOnBean:用于自动配置中,当需要某个 Bean 存在时,才能加载某些组件
- @ConditionalOnClass:当类路径下存在指定的类时,才会加载当前的配置或 Bean
- @ConditionalOnMissBean:与
@ConditionalOnBean
相反。当容器中没有某个指定的 Bean 时,才会加载当前的配置或 Bean
SpringBoot的自动配置原理
Spring Boot的自动配置原理是基于条件化配置(Conditional Configuration)的概念。自动配置使得在应用程序启动时,Spring Boot可以根据项目的依赖和类路径上的内容,自动配置各种功能和组件,而无需开发者显式地进行大量的配置。
1.通过@SpringBootConfiguration引入@EnableAutoConfigration来启动自动配置
2.@EnableAutoConfigration引入了@import,@import中导入了@deferredImportSelect注解,它会使SpringBoot的自动配置类顺序在最后,方便我们扩展和覆盖
3.Spring容器启动时:加载IOC容器时会解析@Import注解
4.然后读取所有starter中的META-INF/spring.factories文件(这个文件中列出了各个Starter所提供的自动配置类)
5.自动配置类的读取: Spring Boot会在启动时扫描项目的依赖中的spring.factories文件,找到各个Starter的自动配置类(AutoConfigrationClass类),并加载这些类。
6.@Conditional 注解的条件判断: 自动配置类通常会使用 @Conditional 注解来定义一些条件,例如 @ConditionalOnClass、@ConditionalOnMissingBean 等。这些条件会在Spring Boot启动时进行评估,根据条件判断结果来决定是否应用某个自动配置。
7.自动配置与Bean注入: 符合条件的自动配置类会在Spring容器中创建和注册一些Bean。这些Bean通常是应用程序所需的基础设施,如数据源、消息队列、缓存等。这些Bean会根据自动配置的条件和配置信息被注入到Spring的应用上下文中。
SpringBoot的启动流程
1. 主方法执行
- 启动 Spring Boot 应用的入口是
main
方法,通常是一个带有@SpringBootApplication
注解的类。SpringApplication.run()
方法会被调用,启动整个应用。
2. 创建 Spring 应用上下文
SpringApplication
创建一个ApplicationContext
(通常是AnnotationConfigApplicationContext
或SpringApplication
的子类),这是 Spring 容器的核心,用于管理 Bean 的生命周期和配置。
3. 设置应用环境
SpringApplication
会创建并设置一个ConfigurableEnvironment
,这包括读取配置文件(如application.properties
或application.yml
)、命令行参数、环境变量等。
4. 处理命令行参数
- 如果有提供命令行参数,
SpringApplication
会解析这些参数并应用到环境中。
5. 准备上下文
- 在创建
ApplicationContext
之前,Spring Boot 会执行一些准备工作,如设置默认的环境配置、设置 Spring Boot 特性等。
6. 加载 Bean 定义
- Spring Boot 使用
@Configuration
和@ComponentScan
注解来扫描并加载应用中的 Bean 定义。@SpringBootApplication
注解实际上是@ComponentScan
的一个组合,自动扫描同包及其子包中的组件。
7. 自动配置
- 启用自动配置功能,
@EnableAutoConfiguration
注解会根据应用的依赖和环境条件自动配置所需的 Bean。Spring Boot 会加载spring.factories
文件中的配置类,执行自动配置逻辑。
8. 创建和初始化 Bean
- 根据 Bean 定义,Spring 容器创建这些 Bean,并通过依赖注入(DI)满足它们之间的依赖关系。此过程包括执行构造函数、设置属性、调用
@PostConstruct
方法等。
9. 应用上下文刷新
- 调用
ApplicationContext
的refresh()
方法,完成上下文的初始化。此时,所有 Bean 都会被创建并被注入。
10. 事件发布
- 在上下文刷新后,Spring Boot 会发布一些事件,如
ApplicationReadyEvent
和ApplicationStartedEvent
,开发者可以通过实现ApplicationListener
接口来监听这些事件。
11. 运行 Web 应用
- 如果是一个 Web 应用,Spring Boot 会启动内嵌的 Web 服务器(如 Tomcat、Jetty),并将应用的上下文与服务器关联,开始监听请求。
12. 完成启动
- 应用完成启动后,可以开始处理来自客户端的请求,用户可以通过配置的端点与应用进行交互。
总结
Spring Boot 的启动流程大致分为以上几个步骤,从执行主方法开始,到创建和配置 Spring 上下文,再到加载 Bean 和自动配置,最终启动 Web 服务器并处理请求。这个流程简化了传统 Spring 应用的配置,使开发者能够专注于业务逻辑,而不是底层的框架细节。
Spring Boot REST 请求风格
HTTP 协议是一个广泛应用的 Internet 协议,不同的请求方法,常见的有GET , POST , PUT , DELETE
REST 全称 Representational State Transfer ------(资源)表现层状态转化,是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便, 所以正得到越来越多网站的采用
REST 风格就是通过 Http 请求方式的不同来标识不同的方法,即对于同一个请求路径,可以根据请求方式的不同来区分它们
springBoot的核心配置文件有哪些,作用是什么
application 和 bootstrap 配置文件。
application: 用于项目的自动化配置。
bootstrap: 一些不能被覆盖的属性和加密或解密的场景。比application要先加载。
springBoot配置文件有几种类型,区别是什么
.yml和.properties区别主要是书写方法不一样
.properties基于键值对的配置文件,使用 key=value
的格式进行配置,易读。
.yml使用缩进和层级结构表示配置,比 application.properties
更加易写,更适合嵌套结构的配置。
.properties加载优先级大于.yml。
什么是热部署?springBoot怎么实现热部署
热部署: 修改代码不需要重启,就可以实现编译并部署到服务器上。(1)在开发时修改代码不需要重启服务,节省了时间。(2)部署在服务器上的程序,可以在不停止的情况下进行升级。
①使用devtools。在配置文件中把devtools.restart.enabled 设置为 true。每次都需要build一下才行。
②idea设置实现热部署。