几分钟带你快速了解SpringBoot框架理论知识!

news2024/11/8 21:53:20

1.什么是SpringBoot

SpringBoot其实就是Spring的子项目。它简化了Spring的开发难度,舍弃了一切可以舍弃的xml配置文件,提供了各种启动器,让程序员上手更快,节省了开发时间。

2.SpringBoot的优点

SpringBoot其实就是对Spring的缺点进行了改进和优化,基于约定优于配置的思想,能让开发人员不必在配置文件盒业务逻辑之间进行来回的思维切换,大家就能全身心投入到逻辑业务代码的书写里面,从而可以大大提高开发效率,也能一定程度上缩短项目周期。

(1)版本锁定

解决的是maven依赖版本容易冲突的问题,集合了很多常用和测试过的所有版本。

(2)起步依赖

解决的是一个功能开发的时候需要整合多个jar包的问题,集合了常用的jar包。

(3)自动配置

解决了整合框架或者技术配置文件过多,集合了所有的约定的默认配置。

(4)内置tomcat

通过内置的tomcat,不需要再引入外部的tomcat就可以直接运行javaee项目。

总结:大家会称SpringBoot是搭建项目的脚手架。最主要就是为了帮助我们快速构建庞大的Spring项目,并尽可能减少一切xml配置文件,做到开箱即用、,迅速上手,让我们可以更关心业务而不是配置文件。

3.运行SpringBoot项目的方式

(1)使用maven插件进行启动

(2)打成jar包启动运行

(3)直接运行main方法启动运行

4.SpringBoot的启动器starter

4.1 starter是什么

starter启动器,能够通过启动器整合集成其他的技术,从而提供相应的开发和运行环境。

如:在pom文件里面spring-boot-starter-web就可以进行web开发。除此之外还有redis、mybatis等等。

4.2 starter的执行原理

(1)SpringBoot项目在启动时候就会去扫描jar包中的Spring.factories文件。

(2)根据文件里面的配置去加载自动配置类,文件格式是key=value的形式,value里面定义了多个需要Spring加载的类。

(3)Spring会去加载这些自动配置类,Spring读取以后,就会创建这些类的对象,然后全部放到IOC容器里面,等到后面需要的时候直接从Spring容器里面获取就可以了。

4.3 SpringBoot中常用的启动器

(1)spring-boot-starter-web

(2)spring-boot-starter-jdbc

(3)spring-boot-starter-jpa

(4)spring-boot-starter-redis

(5)spring-boot-starter-test

...

5.SpringBoot运行原理

5.1 SpringApplication类作用及run()方法作用

(1)SpringApplication它整合所有其他框架的启动类,只需要运行这一个类,全部整合即可完成。

(2)调用run函数,将当前类的字节码传入,还有main方法的参数args传入。里面提到的字节码传入其实是为了将注解@SpringBootApplication进行传入。

(3)获取当前启动类的核心信息,创建IOC容器。

5.2 当前启动类@SpringBootApplication详细剖析

run函数传入的当前启动类字节码其实就是@SpringBootApplication,点开该注解的源码,能够看到里面包含了四大类注解:

(1)jdk原生注解

 @Target:声明当前注解的使用范围

 @Rerention:声明生命周期

@Documented:声明打包成doc文件的时候需要带着注解

@Inherited:声明是否子类会显示父类的注解

(2)@SpringBootConfiguration

 点开该注解的源码,会发现本质就是@Configuration,定义该类是个和xml配置文件一样的配置类。

提到@Configuration就要提到他的搭档@bean,这两个注解一起使用就可以创建一个简单Spring配置类,可以用来代替相应的xml配置文件。可以理解为创建了IOC容器。

(3)@ComponentScan

这个注解就和Spring配置文件里面的@ComponentScan对应,其实就是自动扫描并加载符合要求的组件或者bean定义。最终把这些bean定义都加载到IOC容器里面。

如果有需要可以通过basePackages细粒度定制@ComponentScan自动扫描的范围,如果不指定则默认扫描@ComponentScan所在类下面的包和子包。一定需要注意SpringBoot的启动最好放在root package下面,因为默认并不指定basePackages,这样就可以扫描root package下面的所有包了。

(4)@EnableAutoConfigration

(1) @EnableAutoConfiguration的本质是@Import,借助@Import注解将所有符合自动配置条件的bean定义加载到IOC容器里面。@EnableAutoConfiguration会根据类路径中的jar依赖为项目进行自动配置。

(2)SpringBoot如何完成自动配置?

·SpringBoot自动配置的注解,@EnableAutoConfiguration

·使用的时候在启动类加上@SpringBootConfiguration,这个注解是复合注解,内部包含了@EnableAutoConfiguration

·@EnableAutoConfiguration里面有@Import注解,这个注解其实才是完成自动配置的关键

·@Import里面导入了一个类AutoConfigurationImportSelector,这个类内部提供了一个方法selectImports,这个方法会扫描导入的所有jar下面的spring.factories文件。解析文件中自动配置类key=value,将列表里面的类全部创建,放入搭配Spring容器中。

6.SpringBoot热部署

只需要引入spring-boot-starter-devtools启动器,即可以完成热部署了。

7.SpringBoot中的配置文件

7.1 两类

application.yml或application.properties

bootstrap.yml或bootstrap.properties

7.2 区别

(1)bootstrap是由ApplicationContext类加载,比application配置文件优先被加载

(2)bootstrap文件的属性不可以修改

(3)appliction:Springboot项目的自动化配置

(4)bootstrap:使用cloud config配置中心时,需要加载连接配置中心的配置属性的,就就可以使用bootstrap来完成。

加载一些不能被覆盖的数据,加载一些加密或者解密的数据。

7.3 读取配置文件的方式

(1)读取默认配置文件

需要注入Environment类,使用environment.getProperty(properties中的key),这样就能获取到key对应的value值

@Value(${key.value})直接读取

(2)读取自定义配置文件

·自定义配置文件的后缀必须是.properties

        ·编写和自定义配置文件对应的java类,类上放注解

        @ConfigurationProperties("前缀")

        @PropertySource("指定配置文件")

        @Component包扫描

·读取方式和读取默认配置文件方式一样

8.SpringBoot支持的日志文件

(1)log4j

(2)logback

(3)Java Utils logging

9.SpringBoot常用的注解

@SpringBootApplication:它封装了@SpringBootApplicationConfiguration、@EnableAutoConfiguration、@ComponentScan三个核心类,大大节省了程序员配置的时间,这也是SpringBoot的核心思想。

@MapperScan:这是spring-boot支持mybatis组件的一个注解,通过该注解指定mybatis接口类的路径,完成对mybaits接口的扫描。

@RestController:是@Controller和@ResponseBody的组合,如果在类上面添加了该注解,就不需要再添加@ResponseBody了。

@RequestMapping:在方法定义请求路径。

@GetMapping、@PostMapping、@PutMapping、@DeleteMapping:是配合上面的RequestMapping使用,统一成Rest风格的,可以指定更明确的路径。

@PathVaribale:路径变量注解,用{}来定义路径的变量名。

@Service:用来标注业务层注解。

@Component:和Spring的注解功能一样,注入到IOC容器里面。

@EnableScheduling:通过@Import将Spring调度框架的相关bean定义都加载到IOC容器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/683664.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

抖音林客系统定制开发

抖音林客是一款提供旅游攻略和景点推荐的短视频社交平台,主要用户群体为喜欢旅游和分享生活的年轻人。从需求分析角度来看,可以从以下几个方面进行分析: 信息获取需求:抖音林客用户需求获取有关旅游的详细和实用的信息&#x…

Idea快捷键设置(Idea快捷键大全)

目录 友情提醒第一章、IDEA常用快捷键1.1)快捷键:查找/提示类1.2)快捷键:修改代码类1.3)快捷键:光标移动类 第二章、如何修改快捷键2.1)修改快捷键的方法2.2)我修改的快捷键&#xf…

不容错过!科东软件在2023华南国际工博会等你,一起见证科技的力量!

诚挚邀请 2023年6月27-29日,SCIIF华南国际工业博览会即将在深圳国际会展中心(宝安新馆)召开。本届华南工博会汇集大批国内外头部大咖,将呈现一系列世界领先的技术和创新理念,为新型工业发展注入新动力。 科东软件作为…

华为eNSP入门实验,Vlan配置,路由配置,用户模式,链路聚合

文章目录 一、同一交换机下的PC通信二、不交换机下的PC通信三、配置静态路由通信四、路由器rip协议配置五、路由器ospf协议配置六、单臂路由七、通过三层交换机使不同的Vlan能连通八、设备consolo密码模式九、设备consolo用户密码模式(AAA模式)十、Telne…

2023年低代码平台全球排行榜:企业首选榜单,揭晓最受欢迎的工具

近年来,随着数字化转型和云计算技术的普及,低代码平台已经成为企业开发和应用程序的首选工具之一。低代码平台可以大大缩短开发时间和成本,提高灵活性和可扩展性,同时保证应用程序的质量和稳定性。在这个强制数字化的时代&#xf…

关于npm和package.json的一些经验之谈(如何同时使用多个版本的echarts)

前言 人们往往会忽视他们最常用的东西的一些构造原理,感觉就是天生自带没有为什么。但是真的被问到这些问题的时候,却又答不上来。对于前端开发工程师来说,npm和package.json就是这样的东西。很熟悉却又很陌生。熟悉,是因为&…

【消费战略方法论】食品品牌成功的本质

消费始于消费者 也终于消费者 当下的品牌是否都是以“消费者”为核心进行打造和运营的?面对着越来越多、五花八门的战略思路、品牌方法、营销理论,很多品牌越来越偏离了“消费”的本质。沉迷于精湛的营销打法之前是否需要先审视一下做品牌的初衷。 现…

Nginx服务性能和安全优化

目录 一、配置Nginx隐藏版本相关信息 1.隐藏版本号 2.修改版本号及相关信息 ​编辑​编辑 二、修改Nginx运行时的属主和属组 三、配置Nginx网页缓存时间 四、配置Nginx站点日志分割 五、设置Nginx长连接及超时时间 六、配置Nginx网页压缩 七、配置Nginx防盗链 1.模拟…

人工智能-A*启发式搜索算法解决八数码问题 Python实现

一.问题描述 八数码问题也称为九宫问题。在 33 的棋盘,摆有八个棋子,每个棋子上标有 1 至 8 的某一数字,不同棋子上标的数字不相同。棋盘上还有一个空格(以数字 0 来表示),与空 格相邻的棋子可以移到空格中…

操作系统——Linux 进程间通信

一:实验题目 Linux 进程间通信 二:实验目的 Linux 系统的进程通信机构(IPC)允许在任意进程间大批量地交换数据,通过本实验,理解 熟悉 Linux 支持的消息通信机制。 三:实验内容(…

企业级微服务架构实战项目--xx优选-小程序安装篇4

一 搭建微信小程序前端环境 1.1 申请小程序测试号 申请地址:微信公众平台 使用微信扫描二维码进行申请,申请成功之后,进入界面,获取小程序ID和秘钥 。 AppID(小程序ID) wx62bfe844fea3eba8 AppSecret(小程序密钥) …

JavaScript ES9新特性

文章目录 Object spread syntax(对象扩展语法)Promise.prototype.finally()Asynchronous Iteration(异步迭代):Rest/Spread Properties(剩余和扩展属性):RegExp named capture group…

Apikit 自学日记:导入、导出文档

一、导入API文档 功能入口:API管理应用 / 选中某个项目 / API文档菜单 / 点击“ API”按钮旁的下拉按钮 / 选中“导入API” Eolink提供一键导入已有API文档的功能,支持多种产品格式。常用于新项目创建后,需要对旧项目或旧软件内数据进行迁移…

认识设计组件帮助测试,以提高产品用户体验

一、控制元素 1、活动指示器——应与背景想协调,用于持续时间不明的进程,单一元素不显示,大于1个显示 2、加载控件——同一个专区页面,加载样式统一 3、页码控制器——原点最好控制在5点内,左右滑动,点击原…

OpenCL编程指南-5.5图像读、写函数

读图像 OpenCL GPU设备有专用硬件来读、写图像。OpenCL C图像读、写函数允许开发人员充分利用这个专用硬件。OpenCL 中的图像支持是可选的。要了解一个设备是否支持图像,可以使用clGetDeviceInfo API查询CL_DEVICE_IMAGE_SUPPORT属性。 需要说明的是&#xff0…

c4d+AI+PS设计广告展示架/销售柜台/展示盒子的建议

1、首先做出我标识出来的样子,这里称作A面。(可用软件:PS、AI、cdr等) 2、制作用于展示盒A面PNG图片(PS来掏空空白处用于描边)。 操作:按需求缩小图片,载入选区,新建图层…

three.js标准网格材质(MeshStandardMaterial)光照、粗糙度、金属度、法线属性介绍

如上图,在前面的章节中我们通过设置物体的纹理和材质实现了一个3d的立体门框的效果 完整代码如下: import * as THREE from "three"; // 导入轨道控制器 import { OrbitControls } from "three/examples/jsm/controls/OrbitControls&quo…

新媒体运营工作总结

新媒体运营工作总结篇1 一、大力提升新媒体平台的关注度。在当前掩盖全校60%的同学的基础上,进一步提高掩盖率,争取在未来一年中到达90%以上。为了增强平台与受众的互动与交流,吸引同学们的关注,可以展开更多同学们喜闻乐见的线上…

macOS FreeBSD 如何刷新 DNS 缓存

macOS FreeBSD 如何刷新 DNS 缓存 全文:如何刷新 DNS 缓存 (macOS, Linux, Windows) Unix Linux Windows 如何刷新 DNS 缓存 (macOS, FreeBSD, RHEL, CentOS, Debian, Ubuntu, Windows) 请访问原文链接:https://sysin.org/blog/how-to-flush-dns-cach…

(动态规划) 5. 最长回文子串 ——【Leetcode每日一题】

❓ 5. 最长回文子串 难度:中等 给你一个字符串 s,找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。 示例 1: 输入:s “babad” 输出:“bab” 解释&#xff1a…