请求响应,分层解耦

Tomcat实际上是通过DispatcherServlet接口进行交互
在这里插入图片描述
在这里插入图片描述

请求

postman

Postman 是一款功能强大的 API 开发工具

主要功能

接口测试:

可以轻松发送各种 HTTP 请求,包括 GET、POST、PUT、DELETE 等。
设置请求头、请求参数、请求体等,模拟不同的请求场景。
查看响应结果,包括响应状态码、响应头、响应体等,便于分析接口的正确性。

环境管理:

可以创建多个不同的环境,例如开发环境、测试环境、生产环境等。
在不同环境中设置不同的变量,方便在切换环境时快速修改请求参数。

集合管理:

可以将多个请求组织成集合,方便管理和复用。
可以对集合进行分类、排序、搜索等操作。

自动化测试:

使用 Postman 的测试脚本功能,可以对接口进行自动化测试。
可以设置断言来验证响应结果是否符合预期。

团队协作:

Postman 支持团队协作,可以共享集合、环境、测试脚本等。
方便团队成员之间的协作和沟通。

获取请求参数的方法

通过HttpServletRequest对象进行获取

在这里插入图片描述
在这里插入图片描述

springboot方法

在这里插入图片描述

如果请求参数不对应
注意,这个注解中有一个required参数,默认为true,如果不修改,则必须带上注解指定的参数。


在这里插入图片描述


RequestMapping表示请求的路径:localhost:8080/simpleParam?name = Liushiyu&age=10000

实体参数

需要传递的参数和实体的属性一一对应
在这里插入图片描述

复杂实体参数的封装(如果存在继承关系)

在这里插入图片描述

数组集合参数

数组参数

定义成数组,然后传递所有的即可
在这里插入图片描述
在这里插入图片描述

集合参数

需要加上@RequestParam的注解来绑定参数关系
在这里插入图片描述

日期时间参数

LocalDateTime是jdk1.8提供的一个对象
在这里插入图片描述

Json参数

postman发送请求参数

需要放在请求体中,所以必须是post请求
在这里插入图片描述

服务端接收Json参数

需要加上@RequestBody注解,来将Json数组赋值给对象
在这里插入图片描述

路径参数

参数已经成为url的一部分在这里插入图片描述
在这里插入图片描述

响应

在这里插入图片描述
像这样的每一个函数都叫一个功能接口
在这里插入图片描述


为了方便前后端处理和项目的管理维护,一般会约定一个统一的响应结果


在这里插入图片描述
直接返回对象会被转化对应每一个对象属性的json数据

小结

在这里插入图片描述

案例

在这里插入图片描述
在这里插入图片描述
== 补充学习xml解析 ==

springboot默认静态资源存放位置

在 Spring Boot 中,默认的静态资源存放位置有以下几个:

静态资源目录

/static:可以直接存放静态文件,如 CSS、JavaScript、图片等。
/public:也是用于存放公共静态资源的默认位置。
/resources目录下的/static子目录和/public子目录也被视为静态资源存放处。

访问方式

当 Spring Boot 应用程序运行时,你可以通过相对 URL 来访问这些静态资源。例如,如果有一个名为style.css的 CSS 文件存放在/static目录下,你可以在浏览器中通过/style.css来访问它。
静态资源的加载顺序通常是先在/static目录中查找,如果找不到,再在/public目录中查找,最后在/resources/static或/resources/public中查找。这样的设计使得你可以根据需要灵活地组织和管理静态资源。

分层解耦

三层结构

在这里插入图片描述


请求的处理流程:


在这里插入图片描述

代码实现:

在这里插入图片描述

解除耦合

在这里插入图片描述
由于上层定义了其他层的对象,所以这两层存在耦合,维护时不方便。

高内聚低耦合
高内聚

高内聚指的是一个模块内部的各个元素之间联系紧密,功能相关性强

例如,一个用户管理模块,它负责用户的注册、登录、信息修改等功能,这些功能都是围绕用户这个主题展开的,具有高内聚性。

低耦合

低耦合指的是不同模块之间的依赖关系尽可能地弱

例如,在一个电商系统中,订单模块和商品模块之间通过接口进行交互,订单模块只关心商品的基本信息,而不关心商品模块的具体实现,这样就实现了低耦合。

解决方案

设计一个容器,将层对象放在容器之中,在使用时从容器之中调用。
在这里插入图片描述

IOC & DI

Bean对象

Bean 对象是一种符合特定规范的 Java 对象。通常具有以下特点:
是一个普通的 Java 对象(POJO,Plain Old Java Object),即没有继承特定的类或实现特定的接口,只是一个简单的类的实例。
具有私有属性,并提供公共的 getter 和 setter 方法来访问这些属性。

@Component 注解表示将当前类交给容器或框架进行管理,成为IOC的Bean对象
@Autowired注解表示运行时会从IOC容器中获取对应的Bean对象并赋值给变量
在这里插入图片描述
如果要实现不同功能的切换,只需要将@Component注解注释掉,在新功能上加上注解。

在实际项目开发中,一般使用其衍生注解,以达到区分的目的。
在这里插入图片描述
可以通过Value属性指定Bean对象的名字
在这里插入图片描述

注意
在这里插入图片描述

组件扫描

定义与作用

组件扫描是一种自动发现和注册 Java 类为可管理组件的机制。它可以扫描指定的包或类路径,查找带有特定注解的类,并将这些类注册为 Spring 容器中的 bean。
作用主要有以下几点:
提高开发效率:开发者不需要手动在配置文件中逐个注册 bean,减少了繁琐的配置工作。
增强可维护性:当有新的组件添加到项目中时,只需要添加相应的注解,组件扫描会自动发现并注册新的组件,无需修改配置文件。
实现松散耦合:通过注解来标识组件,使得组件之间的依赖关系更加清晰,降低了代码的耦合度。

常见的注解用于组件扫描

@Component:这是一个通用的注解,可以用于标识任何类型的组件。Spring 容器会自动扫描带有这个注解的类,并将其注册为 bean。
@Service:通常用于标识业务逻辑层的组件。
@Repository:用于标识数据访问层的组件,例如 DAO(Data Access Object)类。
@Controller:用于标识 Web 层的控制器组件。

在 Spring 中的使用

在 Spring 配置文件中,可以通过开启组件扫描来自动发现和注册 bean。例如,在 XML 配置文件中,可以使用 ··· <context:component-scan>元素来指定要扫描的包:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="com.example.packageName"/>

</beans>

在 Java 配置类中,可以使用 @ComponentScan 注解来实现组件扫描:

@Configuration
@ComponentScan(basePackages = "com.example.packageName")
public class AppConfig {
    // 其他配置...
}
注意事项

确保注解的正确使用:只有带有适当注解的类才会被组件扫描发现。
包路径的准确性:在配置组件扫描时,要确保指定的包路径正确,以避免遗漏或错误地扫描组件。
命名冲突:如果多个类具有相同的名称,可能会导致命名冲突。在这种情况下,可以使用 @Qualifier 注解来明确指定要注入的 bean。

默认扫描启动类所在的包,如果定义在其外,则扫描不到。可以在main类中显式定义要扫描的包:
在这里插入图片描述
但是一般都要定义在启动类之中。

自动装配

== 如果定义两个相同的注解== 存在两个相同类型的Bean会直接报错。

解决方法

1.用Primary注解进行最高优先级服务的指定
在这里插入图片描述
2.利用Qualifier注解
在这里插入图片描述
3.利用Resource注解(利用Jdk进行实现,以上两个都是利用Spring框架进行实现的,此方法默认按照名称进行注入而AutoWire默认按照类型------ 类似Controller和Service的区别? 进行注入)

在这里插入图片描述

  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值