ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

SpringBoot学习之基础1

SpringBoot学习之基础1

文章目录

  • Spring全家桶
  • Spring是什么
  • Springboot是什么
  • Springboot项目创建
    • Springboot官网创建
    • IDEA创建现存版本
    • IDEA创建旧jdk版本项目
    • 自动配置原理分析
  • springboot项目启动
  • yml配置文件
  • 多种配置文件
  • 配置文件效果
  • Bean
  • REST API
  • 具体内容
    • RowMapper接口
    • BaseMapper接口

Spring全家桶

web:SpringWebMVC、SpringMVC、SpringWebFlux持久层:SpringData、SpringDataJPA、SpringDataRedis、SpringDataMongoDB安全校验:SpringSecurity构建工程脚手架:SpringBoot微服务:SpringCloud

Spring是什么

是什么: 是一个轻量级的开源框架,是为解决企业应用开发的复杂性而创建的; 采用三层架构实现,表现层(SpringMVC)、业务层(Spring的IoC)、持久层(Spring的JDBC、ORM、Mybatis等持久层框架); 本质核心是:控制反转(IOC)、依赖注入(DI)和面向切面编程(AOP); 三层架构(MVC架构): 表现层(SpringMVC)=负责接受客户端的请求,向客户端发送请求结果;SpringMVC,是一种常见的软件设计模式,用于将应用程序的逻辑分离视图、模型、控制器三个组件; 视图=负责展示数据给用户,并接收用户的输入; 模型=应用程序的数据和业务逻辑的表示。它负责处理数据的读取、存储和操作,以及业务规则的处理; 控制器=是模型和视图之间的协调者,将用户的请求转发给模型进行处理,并将处理结果传递给视图进行展示; 业务层(Spring的IoC)=负责项目业务逻辑处理;IOC=设计思想,将对象的创建的权利和对象的声明周期的管理过程交给Spring框架来处理; 谁控制谁=IOC容器控制对象创建; 为何反转: 正转=对象a直接获取依赖对象b; 反转=容器帮我们查找及注入依赖对象,对象a被动接受依赖对象b; 持久层(Spring的JDBC、ORM、Mybatis等持久层框架)=访问数据层,将数据持久化到数据库;Mybatis=是一个开源的、轻量级的持久层框架,不仅免除了JDBC代码、设置参数以及获取结果集的工作,而且支持自定义SQL、存储过程以及高级映射;实现方式,仅通过简单的XML或注解来配置和映射原始类型、接口以及JavaPOJO作为数据库中的记录。 注:POJO=普通Java对象(PlainOldJavaObject)

Springboot是什么

约定大于配置:

约定大于配置; “约定大于配置”(ConventionOverConfiguration,简称CoC)是软件工程领域的一种设计理念,尤其在现代Web框架中广泛采用,SpringBoot便是其中的典范。这一理念主张在设计框架或系统时,开发者应当遵循预设的约定,而无需进行大量显式的配置。这样做可以简化开发流程,减少配置错误,提高开发效率,让开发者能更快地专注于业务逻辑的实现。 “约定大于配置”在SpringBoot中的体现 自动配置:SpringBoot通过一系列的starter依赖和自动配置类,自动为项目添加常见的功能,如Web服务、数据库连接、安全控制等,而无需手动配置复杂的XML文件或繁琐的Java配置。例如,添加spring-boot-starter-web依赖后,SpringBoot会自动配置嵌入式Tomcat服务器、SpringMVC框架等。 默认启动类:SpringBoot应用程序通常有一个主类,标注@SpringBootApplication注解,这表明该类是应用程序的入口点。SpringBoot会扫描该类及其子包,自动发现和配置Bean。开发者不需要显式地指定每个组件的位置。 环境变量和配置文件:SpringBoot会自动读取application.properties或application.yml配置文件中的属性,以及环境变量,用于调整应用的行为,而不需要在代码中硬编码配置信息。 内置服务器:SpringBoot默认集成了Tomcat、Jetty或Undertow等内嵌服务器,开发者无需额外配置服务器即可运行应用。 日志管理:SpringBoot会自动配置日志系统,如Logback或log4j,开发者只需关注日志输出级别和格式,而不需要关心具体的日志框架配置。 健康检查和监控:SpringBootActuator模块提供了开箱即用的健康检查和应用监控功能,无需额外配置即可启用。 实际应用场景: 假设你正在构建一个新的SpringBoot项目,按照“约定大于配置”的原则,你只需要添加必要的starter依赖,比如spring-boot-starter-data-jpa和spring-boot-starter-web,并定义一些实体类和Repository接口。SpringBoot会自动配置JPA和Web环境,包括数据库连接、事务管理、RESTfulAPI支持等,而无需编写复杂的配置代码。 总的来说,“约定大于配置”使得SpringBoot项目更加简洁、易维护,降低了学习和使用的门槛,让开发者能够快速上手,专注于业务逻辑的实现而非框架配置的细节。 自动装载; 需要进一步修改的内容。。。。。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匹配;

项目注意事项

@SpringbootApplicationspringboot中的启动类是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的配置@ConfigurationSpring配置类@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=valueapplication.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选择进行打包;

配置文件效果

# 文件上传(multipart/form-data) 的配置spring:servlet:multipart:max-file-size:20MB# 单个上传文件的最大大小max-request-size:20MB# 整个 multipart 请求的最大大小

Bean

REST API

REST定义:REST=RepresentationalStateTransfer--》表述/具体的-状态-转移 转移=前端与后端之间传递数据; 状态=前后端传递的数据,例如删除某数据,传递的不是数据本身,而是想要修改的数据成某种状态; 表述/具体的=修饰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进行处理操作。 作用: 用于操作数据库;
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进