文章目录
Spring全家桶
web:Spring Web MVC 、Spring MVC、Spring Web Flux
持久层:Spring Data 、Spring Data JPA、Spring Data Redis、Spring Data MongoDB
安全校验:Spring Security
构建工程脚手架:Spring Boot
微服务:Spring Cloud
Spring是什么
是什么:
是一个轻量级的开源框架,是为解决企业应用开发的复杂性而创建的;
采用三层架构实现,表现层(Spring MVC)、业务层(Spring的IoC)、持久层(Spring的JDBC、ORM、Mybatis等持久层框架);
本质核心是:控制反转(IOC)、依赖注入(DI)和面向切面编程(AOP);
三层架构(MVC架构):
表现层(Spring MVC) = 负责接受客户端的请求,向客户端发送请求结果;
Spring MVC,是一种常见的软件设计模式,用于将应用程序的逻辑分离视图、模型、控制器三个组件;
视图 = 负责展示数据给用户,并接收用户的输入;
模型 = 应用程序的数据和业务逻辑的表示。它负责处理数据的读取、存储和操作,以及业务规则的处理;
控制器 = 是模型和视图之间的协调者,将用户的请求转发给模型进行处理,并将处理结果传递给视图进行展示;
业务层(Spring的IoC) = 负责项目业务逻辑处理;
IOC = 设计思想,将对象的创建的权利和对象的声明周期的管理过程交给Spring框架来处理;
谁控制谁 = IOC容器控制对象创建;
为何反转:
正转 = 对象a直接获取依赖对象b;
反转 = 容器帮我们查找及注入依赖对象,对象a被动接受依赖对象b;
持久层(Spring的JDBC、ORM、Mybatis等持久层框架) = 访问数据层,将数据持久化到数据库;
Mybatis = 是一个开源的、轻量级的持久层框架,不仅免除了 JDBC 代码、设置参数以及获取结果集的工作,而且支持自定义 SQL、存储过程以及高级映射;实现方式,仅通过简单的 XML 或注解来配置和映射原始类型、接口以及 Java POJO作为数据库中的记录。
注:
POJO = 普通Java对象(Plain Old Java Object)
Springboot是什么
约定大于配置:
约定大于配置;
“约定大于配置”(Convention Over Configuration,简称CoC)是软件工程领域的一种设计理念,尤其在现代Web框架中广泛采用,Spring Boot便是其中的典范。这一理念主张在设计框架或系统时,开发者应当遵循预设的约定,而无需进行大量显式的配置。这样做可以简化开发流程,减少配置错误,提高开发效率,让开发者能更快地专注于业务逻辑的实现。
“约定大于配置”在Spring Boot中的体现
自动配置:Spring Boot通过一系列的starter依赖和自动配置类,自动为项目添加常见的功能,如Web服务、数据库连接、安全控制等,而无需手动配置复杂的XML文件或繁琐的Java配置。例如,添加spring-boot-starter-web依赖后,Spring Boot会自动配置嵌入式Tomcat服务器、Spring MVC框架等。
默认启动类:Spring Boot应用程序通常有一个主类,标注@SpringBootApplication注解,这表明该类是应用程序的入口点。Spring Boot会扫描该类及其子包,自动发现和配置Bean。开发者不需要显式地指定每个组件的位置。
环境变量和配置文件:Spring Boot会自动读取application.properties或application.yml配置文件中的属性,以及环境变量,用于调整应用的行为,而不需要在代码中硬编码配置信息。
内置服务器:Spring Boot默认集成了Tomcat、Jetty或Undertow等内嵌服务器,开发者无需额外配置服务器即可运行应用。
日志管理:Spring Boot会自动配置日志系统,如Logback或log4j,开发者只需关注日志输出级别和格式,而不需要关心具体的日志框架配置。
健康检查和监控:Spring Boot Actuator模块提供了开箱即用的健康检查和应用监控功能,无需额外配置即可启用。
实际应用场景:
假设你正在构建一个新的Spring Boot项目,按照“约定大于配置”的原则,你只需要添加必要的starter依赖,比如spring-boot-starter-data-jpa和spring-boot-starter-web,并定义一些实体类和Repository接口。Spring Boot会自动配置JPA和Web环境,包括数据库连接、事务管理、RESTful API支持等,而无需编写复杂的配置代码。
总的来说,“约定大于配置”使得Spring Boot项目更加简洁、易维护,降低了学习和使用的门槛,让开发者能够快速上手,专注于业务逻辑的实现而非框架配置的细节。
自动装载;
需要进一步修改的内容。。。。。TODO
SpringBoot的优点:
帮助所有Spring开发者快速入门
开箱即用,提供各种默认配置来简化项目配置
内嵌容器(tomact)简化web项目
没有冗余代码生成和XML配置的要求
Springboot项目创建
微服务:一种架构风格,将开发一个应用变成一系列小服务组合,可通过HTTP(RPC)方式互相通信。
单体应用架构:将一个应用的所有应用服务都封装在一个应用中,各个功能放在一个war包里。
微服务架构:将每个功能元素都独立出来,并将独立出来的功能元素动态组合,也就是对功能元素的复制,而不是整个应用的复制;
创建一个springboot项目
两种方式:Springboot官网版本 / IDEA自己创建(IDEA集成了这个网站);
Springboot官网创建
中文文档:https://springdoc.cn/spring-boot/
官网文档:https://spring.io/projects/spring-boot#learn
Springboot 最新版本是:3.2.2
当前创建页面只支持以下图展示内容:
IDEA创建现存版本
IDEA创建springboot项目
文件 – 新建 – 项目 – Spring Initializr
通过该方法java版本只有17和21 两种,经过验证:jdk1.8 与java17不匹配,可以和java21匹配;
项目注意事项
@SpringbootApplication
springboot中的启动类是application,其他的类都得在该启动类的同级目录下;
启动类application,程序的主入口,本身就是Spring的一个组件;
所有springboot的依赖都采用 spring-boot-starter 这个前缀;
项目打包:package;
IDEA创建旧jdk版本项目
创建项目遇到的问题:
java语言只有17和21版本,jdk是1.8 如何解决?
解决:
参考博客:https://zhuanlan.zhihu.com/p/668876308
该博客的评论部分:把项目上面的start.spring.io 改成 start.aliyun.com即可
在新建项目的页面,修改链接;
application.properties配置修改
# web服务端口号修改
server.port = xxx
# banner修改
需要在线生成网站处理:
https://www.bootschool.net/ascii-art/search
在resource/banner.txt文件
将网站生成的图片放在该文件中。
自动配置原理分析
1 pom.xml
通过spring-boot-starter-parent →spring-boot-dependencies 该包管理的大量的jar包版本;
2 启动器
pom文件中的有大量的启动器(含有starter的包),也就是springboot的启动场景;
主程序
@SpringBootApplication 标注这个类是springboot应用;
SpringApplication.run方法 启动 springboot项目;
3 主程序
1. 主程序
@SpringBootApplication 标注这个类是springboot应用;
SpringApplication.run方法 启动 springboot项目;
2. 注解
@SpringBootConfiguration :Springboot的配置
@Configuration Spring配置类
@Component 说明是Spring的一个组件
@EnableAutoConfiguration 自动配置
@AutoConfigurationPackage 自动配置的包
@Import({Registrar.class}) 自动装配 包注册
@Import({AutoConfigurationImportSelector.class}) 自动配置导入选择
List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);
// 获取所有的配置
结论:
springboot所有自动配置都是在启动的时候扫描并加载:spring.factories
所有的自动配置类都在这里面,但是不一定生效,要判断条件是否成立,只要导入了 对应的 start ,就有对应的启动器了,有了启动器,我们自动装配就会生效,然后就配置成功!
springboot项目启动
需要了解清楚,点击运行之后的所有内容如何运行启动的?
yml配置文件
springboot配置文件可以写的所有内容:
https://docs.spring.io/spring-boot/docs 官网地址没有找到
https://www.cnblogs.com/tangge/p/9609165.html 博客找到了
注意内容:
1 SpringBoot采用全局配置文件,名称是固定的;
application.properties key=value
application.yml key: value
2 yml比propreties存放对象更方便
yml:
student:
name: dahua
age: 3
propreties:
student.name = dahua
student.age = 3
3 yml的行内写法
student:{name,age}
4 yml存储数组(/列表)
pets:
- dog
- cat
- pig
行内写法:
pets:[dog,cat,pig]
5 对空格要求极为严格
可以注入到项目的配置类
6 yml:可以直接给实体类赋值
核实是@ConfigurationProperties
@ConfigurationProperties作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉springBoot将本类中的所有属性和配置文件中相关的配置进行绑定
对应参数 prefix = “person” :将配置文件中的person下面的所有属性一一对应;
只有这个组件是容器中的组件,才能使用容器提供的@Configurationproperties功能。
7 指定特殊的配置文件,xxx.properties 而不是默认配置文件application.properties
@PropertySource(value = “classpath:xxx.properties”)
类的具体属性前,@Value("${配置文件中所要设置的值}")
多种配置文件
方式1:四个配置文件在相同路径下
配置文件所在路径:
项目/src/main/resources/application-xxx.yml
配置文件有:
application.yml
application-dev.yml
application-prod.yml
application-test.yml
三种配置文件,以及一个总的配置文件;
application.yml文件内容:
spring:
profiles:
active: dev
可以正常启动application-dev.yml配置文件;
方式2:多个配置文件在不同的文件夹下
1. yml文件路径
整体路径为:resources/config/xxx/application.yml 以及 logback-spring.xml resources/config/mybatis-config.xml
其中xxx一般为:resource_dev-本地开发;resource_prod-线上环境;resource_test-测试环境;
2. pom.xml配置
需要在配置文件中添加如下内容,才可以在idea右侧的界面中出现dev、prod、test的配置信息
<profiles>
<profile>
<id>dev</id>
<properties>
<profiles.active>dev</profiles.active>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<profiles.active>test</profiles.active>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<profiles.active>prod</profiles.active>
</properties>
<!--默认情况-->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>
3. 本地激活:
使用哪个配置文件,通过maven选择;
4. 打包激活,需要在pom.xml进行配置
<!-- 构建配置 -->
<build>
<resources>
<resource>
<directory>src/main/resources/config</directory>
<excludes>
// exclude表示项目打包要排除的配置文件
<exclude>dev/*</exclude>
<exclude>prod/*</exclude>
<exclude>test/*</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources/config/${profiles.active}</directory>
</resource>
</resources>
// 其中profiles.active参数是前文中提到的配置,通过maven选择进行打包;
Bean
REST API
REST定义:
REST = Representational State Transfer --》表述/具体的-状态-转移
转移 = 前端与后端之间传递数据;
状态 = 前后端传递的数据,例如删除某数据,传递的不是数据本身,而是想要修改的数据成某种状态;
表述/具体的 = 修饰State;
RESTful定义:
xxx-ful 充满/富有xxx的;充满了“具体的状态转移” 的API;
通过语义化的方式请求资源URL,并根据返回的语义来判断这次操作的返回类型和效果;
举例:前端到后端的整个过程;
前端HTML代码,通过渲染得到可视化页面,点击页面上的按钮-浏览器会发出HTTP请求,访问服务端的api接口(不是java中的接口);
案例:代码角度
创建控制类xxController,被@RequestMapping("api/xxx")
编写方法function1、function2.。。。
然后针对不同的方法采用不同的注解,@GetMapping表示获取 @PostMapping表示创建 @PUTMapping表示更新 @DelectMapping表示删除。
具体内容
RowMapper接口
定义:
是Spring框架提供的将数据库查询封装的接口
用来把数据库中的列字段和java bean中属性对应上;
即可以将数据中的每一行数据封装成用户定义的类;
作用:
原生JDBC,从数据库查询出来的记录全都被保存在ResultSet结果集中,需要将结果集中的数据一条条地获取并设置到具体的实体类上,这时就需要RowMapper来处理;
BaseMapper接口
概念:
是Mybatis-plus中的,利用的Mybatis接口编程的实现机制,其默认提供了一系列的增删改查的基础方法,并且开发人员对于这些基础操作不需要写SQL进行处理操作。
作用:
用于操作数据库;