第七章 SpringBoot框架

简介: SpringBoot简化了Spring开发,核心功能包括starter起步依赖、自动配置和内嵌服务器jar运行。通过@EnableAutoConfiguration实现条件化Bean加载,支持自定义starter及多种配置方式,配置优先级为:命令行参数 > 系统属性 > properties > yml/yaml。

聊聊你对SpringBoot框架的理解 ?

SpringBoot是现在Spring家族最为流行的子项目,因为采用原始的SpringFramework框架开发项目,配置起来非常的繁琐,所以在Spring的4.0版本之后,Spring家族推出了SpringBoot框架,而Springboot就是来解决Spring框架开发繁琐的问题的,是用来简化spring框架开发的。

主要提供了这么三大块功能:

  • starter起步依赖。springboot提供了各种各样的starter,在starter起步依赖中,就封装了常用的依赖配置,大大简化了项目引入依赖坐标的复杂度。
  • 自动配置。 这也是springboot中最核心的功能,springboot可以根据特定的条件(当前环境是否引入对应的依赖、配置文件中是否有某个配置项、当前环境是否已经有了某个bean)来创建对象的bean,从而完成bean的自动配置。
  • jar包方式运行。 springboot中内嵌了web服务器,所以我们开发的web项目,也可以直接打成一个jar包,直接基于java -jar 执行运行,非常的方便。

当然,这些呢,只是Springboot中提供的核心功能,还有其他的一些小功能,都是非常实用的 。

SpringBoot框架常见的starter你都用过哪些 ?

  • spring-boot-starter-web (嵌入tomcat和web开发需要servlet与jsp支持)
  • spring-boot-starter-aop (aop开发支持)
  • spring-boot-starter-data-redis (redis支持)
  • spring-boot-starter-data-elasticsearch (es支持)
  • spring-boot-starter-amqp(消息队列支持)
  • spring-boot-starter-data-mongodb (mongodb的支持)
  • mybatis-plus-boot-starter(mybatis plus的支持)
  • mybatis-spring-boot-starter(mybatis的支持)

那这些个starter,其实分为两类,一类是springboot官方提供的,命名都是:spring-boot-starter-xxxx;另一类是第三方框架提供的,命名都是:xxxx-spring-boot-starter。

Spring Boot配置的优先级?

SpringBoot项目中,可以在很多地方来配置项目中的配置项,那这里我主要说两个方面:一个是配置文件,一个是外部配置。

  • 在springboot项目中,支持三类配置文件,分别是:application.properties、application.yml、application.yaml。 而这三类配置文件的优先级最高的是 application.properties,其次是 application.yml,最后是 application.yaml。
  • 而外部配置呢,常用的有两种配置形式,一种是java系统属性,比如:-Dserver.port=9001;另一种是命令行参数,比如:--server.port=10010。而命令行参数的优先级要高于java系统属性。
  • 而整体上,外部配置的优先级要高于项目内部的配置文件中的配置,所以整体来说配置文件的优先级由高到低的顺序为:
  • 命令行参数 > java系统属性 > application.properties > application.yml > application.yaml

SpringBoot自动配置的原理是什么?

嗯,好的,它是这样的。

其实SpringBoot自动配置的核心,是引导类上加的注解@SpringBootApplication 底层封装的一个注解,叫@EnableAutoConfiguration,这个注解才是实现自动化配置的核心注解。

该注解通过@Import注解导入对应的配置选择器,导入了一个ImportSelector接口的实现类。 而在这个类的内部呢,读取了该项目和该项目引用的Jar包中的classpath路径下META-INF/spring.factories文件中的所配置的类的全类名。

在这些配置类中所定义的Bean,会根据条件注解@Condition系列注解所指定的条件来决定是否需要将其导入到Spring容器中。

一般条件判断会有像@ConditionalOnClass这样的注解,判断是否有对应的class文件,如果有则加载该类,把这个配置类的所有的Bean放入spring容器中使用。

但是这里要说明一点哈,就是刚才提到的系统配置类声明的配置文件 META-INF/spring.factories, 在springboot3.0版本之后,就已经废除了,不会在这个文件中配置自动配置类了,替换成了一份新的配置文件,配置文件名比较长,记不住,后缀名为:XXxxxSpringAutoConfiguration.imports

SpringBoot中如何自定义starter?

嗯,这个我知道,之前在项目中,我们封装过的,像阿里云OSS操作的starter。

  • 首先,先说模块哈,自定义starter,我们通常会定义两个maven模块。
  • 一个是:xxx-spring-boot-starter ,这个模块主要负责管理依赖,最后项目中引入的就是这个模块。
  • 另一个是:xxx-spring-boot-autoconfigure,这个模块负责自动配置功能,所有的自动配置的核心代码,都定义在这个模块中。并在在starter模块中,还要引入autoconfigure这个模块的依赖。
  • 然后再来说核心的autoconfigure模块的实现。
  • 第一步呢,就是要根据具体的需求,编写自动配置类。 基于@Configuration注解定义配置类,然后使用@Bean注解来声明bean,可以通过@Conditional系列的注解,根据条件决定是否声明这个bean。
  • 第二步,就是需要在META-INF/spring.factories配置文件中,根据规则配置自动配置类的全类名。 如果是SpringBoot3.x版本,则需要在新的配置文件,META-INF/spring/xxxx.SpringAutoConfiguration.imports文件中配置自动配置类的全类名。

基本上,就这么两块儿。定义好了之后,在各个项目中,就可以引入对应的starter直接使用了。

相关文章
|
3月前
|
Java 关系型数据库 MySQL
低代码平台RuoYi:代码本地运行(☆☆)
简介:掌握SpringCloud、MySQL、Maven技术栈,通过SSH拉取若依项目代码并本地运行,观看文档与视频,录制8分钟以上讲解视频,结构化输出项目理解(技术栈、业务功能、数据库关系)及入职困惑,提升新人适应能力。(239字)
 低代码平台RuoYi:代码本地运行(☆☆)
|
3月前
|
Java 开发工具 数据安全/隐私保护
项目《中州养老》
《中州养老》是一个面向养老院的后台管理系统,涵盖预约、入住、健康监测等核心功能。系统分为员工管理端与家属小程序端,采用Vue3、SpringBoot等技术栈,集成阿里云IOT实现智能设备数据采集与异常报警,并通过RBAC权限模型保障系统安全。
项目《中州养老》
|
3月前
|
机器学习/深度学习 存储 自然语言处理
大模型基础概念术语解释
大语言模型(LLM)基于Transformer架构,通过海量文本训练,具备强大语言理解与生成能力。其核心组件包括注意力机制、位置编码与嵌入层,支持文本分割为Token进行处理。参数量达亿级以上,规模增长带来涌现能力,如复杂推理与跨任务泛化。混合专家模型(MoE)提升效率,推动模型持续扩展。
|
12天前
|
机器学习/深度学习 算法 安全
打破真题依赖!微软、清华联合开源 X-Coder:全合成数据激发代码大模型推理潜力
微软与清华联合推出X-Coder系列模型,首创纯合成数据训练范式,在不使用任何真实竞赛题的前提下,仅用7B参数即在LiveCodeBench v5上达62.9%准确率,超越更大规模依赖真实数据的模型。项目已开源模型与数据集。(239字)
137 11
|
3月前
|
负载均衡 算法 Java
5-微服务篇
本文详解SpringBoot自动装配原理、启动流程、核心注解@SpringBootApplication组成,以及常用起步依赖、配置文件加载顺序。涵盖SpringBoot运行方式、跨域解决方案,结合SpringCloud介绍五大组件、微服务通信、注册发现、负载均衡策略及自定义方法。同时分享项目中限流、熔断、降级、异常处理等实战经验,全面解析微服务架构关键技术实现。
158 0
|
1月前
|
人工智能 边缘计算 分布式计算
阶跃星辰 Step 3.5 Flash 上线!更快更强更稳的 Agent 大脑,开源!
阶跃星辰发布开源大模型Step 3.5 Flash:专为Agent设计,推理速度达350 TPS,支持256K长上下文,采用稀疏MoE+MTP-3+混合注意力架构,在数学与Agent任务上媲美闭源模型,现已全量开放使用。
818 2
|
11月前
|
人工智能 前端开发 搜索推荐
利用通义灵码和魔搭 Notebook 环境快速搭建一个 AIGC 应用 | 视频课
当我们熟悉了通义灵码的使用以及 Notebook 的环境后,大家可以共同探索 AIGC 的应用的更多玩法。
890 124
|
7月前
|
人工智能 算法 API
把「想法」编译成「现实」:魔搭&AMD开发者实践专场完整回顾
8月2日下午,魔搭社区ModelScope 联手 AMD,在杭州办了场有料有趣的「Agent × MCP」开发者实践专场!
409 0
|
5月前
|
存储 自然语言处理 算法
109_噪声鲁棒微调:对抗训练
在当今大语言模型(LLM)的广泛应用中,模型的鲁棒性问题日益凸显。对抗性攻击通过在输入中添加微小但精心设计的扰动,能够误导模型产生错误输出,这对依赖LLM的关键系统构成了严重威胁。噪声鲁棒微调作为提升模型抵抗对抗攻击能力的重要技术,正成为大模型安全性研究的核心方向之一。

热门文章

最新文章