SpringBoot学习之基础1

Spring全家桶

web:Spring Web MVCSpring MVCSpring Web Flux
持久层:Spring DataSpring Data JPASpring Data RedisSpring Data MongoDB
安全校验:Spring Security
构建工程脚手架:Spring Boot
微服务:Spring Cloud

Spring是什么

是什么:
	是一个轻量级的开源框架,是为解决企业应用开发的复杂性而创建的;
	采用三层架构实现,表现层(Spring MVC)、业务层(SpringIoC)、持久层(SpringJDBCORMMybatis等持久层框架);
	本质核心是:控制反转(IOC)、依赖注入(DI)和面向切面编程(AOP);
	
三层架构(MVC架构):
	表现层(Spring MVC= 负责接受客户端的请求,向客户端发送请求结果;
		Spring MVC,是一种常见的软件设计模式,用于将应用程序的逻辑分离视图、模型、控制器三个组件;
		视图 = 负责展示数据给用户,并接收用户的输入;
		模型 = 应用程序的数据和业务逻辑的表示。它负责处理数据的读取、存储和操作,以及业务规则的处理;
		控制器 = 是模型和视图之间的协调者,将用户的请求转发给模型进行处理,并将处理结果传递给视图进行展示;
	业务层(SpringIoC= 负责项目业务逻辑处理;
		IOC = 设计思想,将对象的创建的权利和对象的声明周期的管理过程交给Spring框架来处理;
		谁控制谁 = IOC容器控制对象创建;
		为何反转:
			正转 = 对象a直接获取依赖对象b;
			反转 = 容器帮我们查找及注入依赖对象,对象a被动接受依赖对象b;
	持久层(SpringJDBCORMMybatis等持久层框架) = 访问数据层,将数据持久化到数据库;
		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默认集成了TomcatJettyUndertow等内嵌服务器,开发者无需额外配置服务器即可运行应用。
日志管理:Spring Boot会自动配置日志系统,如Logback或log4j,开发者只需关注日志输出级别和格式,而不需要关心具体的日志框架配置。
健康检查和监控:Spring Boot Actuator模块提供了开箱即用的健康检查和应用监控功能,无需额外配置即可启用。
实际应用场景:
假设你正在构建一个新的Spring Boot项目,按照“约定大于配置”的原则,你只需要添加必要的starter依赖,比如spring-boot-starter-data-jpa和spring-boot-starter-web,并定义一些实体类和Repository接口。Spring Boot会自动配置JPAWeb环境,包括数据库连接、事务管理、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语言只有1721版本,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. 注解
@SpringBootConfigurationSpringboot的配置
	@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 --》表述/具体的-状态-转移
	转移 = 前端与后端之间传递数据;
	状态 = 前后端传递的数据,例如删除某数据,传递的不是数据本身,而是想要修改的数据成某种状态;
	表述/具体的 = 修饰StateRESTful定义:
	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进行处理操作。
作用:
	用于操作数据库;
Spring Boot 基础教程(基于1.3.x-1.5.x) 快速入门 chapter1:基本项目构建(可作为工程脚手架),引入web模块,完成一个简单的RESTful API 使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程 工程配置 chapter2-1-1:配置文件详解:自定义属性、随机数、多环境配置等 chapter2-1-2:2.0 新特性(一):配置绑定全解析 chapter2-2-1:2.0 新特性(二):新增事件ApplicationStartedEvent Web开发 chapter3-1-1:构建一个较为复杂的RESTful API以及单元测试 chapter3-1-2:使用Thymeleaf模板引擎渲染web视图 chapter3-1-3:使用Freemarker模板引擎渲染web视图 chapter3-1-4:使用Velocity模板引擎渲染web视图 chapter3-1-5:使用Swagger2构建RESTful API chapter3-1-6:统一异常处理 chapter3-1-7:使用Java 8中LocalDate等时间日期类的问题解决 chapter3-1-8:扩展XML请求和响应的支持 数据访问 chapter3-2-1:使用JdbcTemplate chapter3-2-2:使用Spring-data-jpa简化数据访问层(推荐) chapter3-2-3:多数据源配置(一):JdbcTemplate chapter3-2-4:多数据源配置(二):Spring-data-jpa chapter3-2-5:使用NoSQL数据库(一):Redis chapter3-2-6:使用NoSQL数据库(二):MongoDB chapter3-2-7:整合MyBatis chapter3-2-8:MyBatis注解配置详解 chapter3-2-9:使用Flyway来管理数据库版本 chapter3-2-10:使用LDAP来统一管理用户信息 chapter3-2-11Spring Boot中增强对MongoDB的配置(连接池等) 事务管理 chapter3-3-1:使用事务管理 chapter3-3-2:[分布式事务(未完成)] 其他内容 chapter4-1-1:使用@Scheduled创建定时任务 chapter4-1-2:使用@Async实现异步调用 chapter4-1-3:使用@Async实现异步调用:自定义线程池 chapter4-1-4:使用@Async实现异步调用:资源优雅关闭 chapter4-1-5:使用@Async实现异步调用:使用Future以及定义超时 日志管理 chapter4-2-1:默认日志的配置 chapter4-2-2:使用log4j记录日志 chapter4-2-3:对log4j进行多环境不同日志级别的控制 chapter4-2-4:使用AOP统一处理Web请求日志 chapter4-2-5:使用log4j记录日志到MongoDB chapter4-2-6:Spring Boot 1.5.x新特性:动态修改日志级别] 安全管理 chapter4-3-1:使用Spring Security chapter4-3-2:[使用Spring Session(未完成)] 缓存支持 chapter4-4-1:注解配置与EhCache使用 chapter4-4-2:使用Redis做集中式缓存 邮件发送 chapter4-5-1:实现邮件发送:简单邮件、附件邮件、嵌入资源的邮件、模板邮件 消息服务 chapter5-1-1:[JMS(未完成)] chapter5-2-1Spring Boot中使用RabbitMQ 其他功能 chapter6-1-1:使用Spring StateMachine框架实现状态机 Spring Boot Actuator监控端点小结 在传统Spring应用中使用spring-boot-actuator模块提供监控端点 Spring Boot应用的后台运行配置 Spring Boot自定义Banner Dubbo进行服务治理 chapter9-2-1Spring Boot中使用Dubbo进行服务治理 chapter9-2-2:Spring Boot与Dubbo中管理服务依赖
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值