代码书写:耦合度偏高
解决方法:使用对象时,在程序中不要主动使用new产生对象,转换为由外部提供对象——IcC控制反转
IoC(Inversion of Control)控制反转
使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转。
Spring技术对IoC思想进行了实现——Spring提供了一个容器,称为IoC容器,用来充当IoC思想中的“外部”。
IoC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在IoC容器中统称为Bean。
Spring目标是充分解耦
- 使用Ioc容器管理bean(IoC)
- 在IoC容器内将有依赖关系的bean进行关系绑定(DI)
SpringBoot是提供的全新框架,其目的是用来简化Spring应用的初识搭建以及开发过程
Spring程序缺点:
- 依赖设置繁琐
- 配置繁琐
SpringBoot程序优点
- 起步依赖(简化依赖配置)
- 自动配置(简化常用工程相关配置)
- 辅助功能(内置服务器)
SpringBoot
parent
- 开发SpringBoot程序要继承spring-boot-starter-parent(定义了若干个依赖管理)
- 继承parent模块可以避免多个依赖使用相同技术时,出现依赖版本冲突
- 继承parent的形式也可以采用引入依赖的形式实现效果
starter
- SpringBoot中常见项目名称,定义了当前项目使用的所有依赖坐标,以达到减少依赖配置的目的
启动方式
-
@SpringBootApplication public class SpringbootDemoApplication { public static void main(String[] args) { SpringApplication.run(SpringbootDemoApplication.class, args); } }
- SpringBoot的引导类是Boot工程的执行入口,运行main方法就可以启动项目
- SpringBoot工程运行后初始化Spring容器,扫描引导类所在包加载bean
REST风格
简介
REST,表现形式状态转换
- 传统风格资源描述形式
- http://localhost/user/getById?id=1
- http://localhost/user/saveUser
- REST风格描述形式
- http://localhost/user/1
- http://localhost/user
优点
- 隐藏资源的访问行为,无法通过地址的值对资源是何种操作
- 书写简化
内容
- REST是约定方式,约定不是规范,可以打破,所以是REST风格
- 模块的名称通常使用复数,表示此类资源,而非单个资源
- 根据REST风格对资源进行访问称为RESTful
@RequestMapping
- 类型:方法注解
- 位置:SpringMVC控制器方法定义上方
- 作用:设置当前控制器方法请求访问路径
- 属性
- value(默认):请求访问路径
- method:http请求动作,标准动作(GET/POST/PUT/DELETE)
@PathVariable
- 类型:形参注释
- 位置:SpringMVC控制器方法形参定义前面
- 作用:绑定路径参数与处理器方法形参间的关系,要求路径参数名与形参名一一对应
- @RequestParam用于接收url地址传参或表单传参,@RequestBody用于接收json数据,@PathVariable用于接收路径参数,使用{参数名称}描述路径参数
- 应用:发送请求参数超过一小时,以json格式为主,@RequestBody应用较广,如果发送非json格式数据,选用@RequestParam接收请求参数,采用RESTful进行开发,当参数较少时,可以采用@PathVariable接收请求路径变量(通常是一个)
REST是默认遵守的规范
看Url就知道要什么
看http method就知道干什么
看http status code就知道结果如何
基础配置
服务端端口配置
server.port=80
关闭运行日志图标,修改banner
spring.main.banner-mode=off #有些版本不适用 spring.banner.image.location=QQ截图20230927143656.png
设置日志相关
logging.level.root=infologging.level.root=errorlogging.level.root=debug
springboot提供了多种属性配置方式
- application.properties
- server.port=80
- application.yml
-
server: port:81
-
- application.yaml
-
server: port:82
-
优先级:properties>yml>yaml
不同配置文件中相同配置按照加载优先级相互覆盖,不同配置文件中不同配置全部保留
yaml
yaml是一种数据序列号格式
优点
- 容易阅读
- 容易与脚本语言交互
- 以数据为可信,重数据轻格式
YAML文件扩展名
- .yml(主流)
- .yaml
yaml语法规则
- 大小写敏感
- 属性层级关系使用多行描述,每行结尾使用冒号结束
- 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
- 属性值前面添加空格(属性名与属性值之前使用冒号+空格作为分隔)
- #表示注释
- 核心规则:数据前面要加空格与冒号隔开
- 数组表示方式:在属性书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号和数据间空格分隔
- 在配置文件中可以使用${属性名}方式引用属性值
- 如果属性中出现特殊字符,可以使用双引号包裹起来
整合第三方技术
整合JUnit
- 名称:@SpringBootTest
- 类型:测试类注解
- 位置:测试类定义上方
- 作用:设置JUnit加兹安的SpringBoot启动类
- (项目结构)
一个简单的BookDao接口:
继承了BookDao接口的BookDaoImpl接口
在springboot04JunitApplicationTests.java测试类中:
测试类换了地方,此时要再测试类中加入引导类,否则不能使用
整合MyBatis
- 创建新模块,选择Spring初始化,并配置模块相关基础信息
- 选择当前模块需要使用的技术集(Mybatis,MySQL)
- 设置数据源参数
- 定义数据层接口与映射配置
- 测试类中注入dao接口,测试功能
注意:MySQL8.X强制要求设置时区(修改url,添加serverTimezone设定)
驱动类过时,更换为com.mysql.cj.jdbc.Driver
整合Mybatis-plus
Mybatis和Mybatis-plus的区别:导入坐标不同,数据层实现简化
- 手工添加MyBatis-Plus对应的starter
- 数据层接口使用BaseMapper简化开发
- 需要使用的第三方技术无法通过勾选确定时,需要手工添加坐标
整合Druid
- 整合Druid需要导入Druid对应的starter
- 根据Druid提供的配置方式进行配置
- 整合第三方技术通用方式
- 导入对应的starter
- 根据提供的配置格式,配置非默认值对应的配置项
项目
- pom.xml
- 配置起步依赖
- application.yml
- 设置数据源,端口,框架相关配置等
- dao
- 继承BaseMapper,设置@Mapper
- dao测试类
- service
- 调用数据层接口或MyBatis-Plus提供的接口快速开发
- service测试类
- controller
- 基于Restful开发,使用Postman测试
- 页面
- 放置在resources目录下的static目录中