当前位置: 首页 > news >正文

web--请求响应、分层解耦

BS架构:可以直接通过网站网页访问

CS架构:需要下载响应客户端

请求

前置工具:postman

请求参数接收

简单参数接收

手动接收(了解)

springboot方式接收

实体参数接收

数组集合参数接收

数组封装

集合封装:加上requestparam绑定集合

日期参数

JSON格式参数

postman发送请求传递JSON参数

注:key值要用引号包裹

接收参数

路径参数

总结

响应

responsebody注解:

统一响应结果

分层解耦

web开发三层架构

Dao

面向接口编程,用以实现多种不同的处理数据方法

Service

Controller

解耦

控制反转(IOC):对象的创建控制权从应用程序转移到外部容器

依赖注入(DI):外部容器为程序运行提供需要的资源

bean:IOC中创建的对象

@Component 注解:将当前类交给IOC容器管理(控制反转)

@Autowired注解:IOC容器为程序提供该类型的bean对象,并赋值给该变量(依赖注入)

IOC

bean的组件扫描

SpringbootApplication默认扫描范围是springboot启动类所在包及其子包范围,若bean类声明在范围之外则无法扫描对应bean类

解决1:

在启动类中通过ComponentScan注解手动设置扫描范围(不建议)

解决2:

将springboot对应代码写在启动类所属包或其子包下,保证其默认扫描能覆盖所有bean类

DI

Autowired注解默认以类型为注入方式从IOC中获取对象进行注入,若IOC中有多个同类型bean类,则默认注入方式会报错

解决1:

通过Primary注解设置bean类注入优先级

解决2:

Qualifier与Autowired配合使用

解决3:

Resource注解

解决2与解决3区别:

  • @Autowired + @Qualifier: 这是 Spring 原生的注解组合。先按类型匹配,如果有多个同类型 Bean,再通过 @Qualifier 指定的名称进行精确匹配。它的匹配过程是 “类型 -> 名称”

  • @Resource: 这是 JSR-250 (Java 规范) 提供的注解。它默认先按 Bean 的名称匹配,如果找不到,再回退到按类型匹配。它的匹配过程是 “名称 -> 类型”

  • 例:统一接口两实现类

    // 接口
    public interface PaymentService {void pay();
    }// 实现类1
    @Component("creditCardPayment") // 指定Bean的名称为 "creditCardPayment"
    public class CreditCardPaymentService implements PaymentService {@Overridepublic void pay() {System.out.println("Paying with credit card.");}
    }// 实现类2
    @Component("alipayPayment") // 指定Bean的名称为 "alipayPayment"
    public class AlipayPaymentService implements PaymentService {@Overridepublic void pay() {System.out.println("Paying with Alipay.");}
    }

    解决2:

  • @Component
    public class ShoppingCart {private PaymentService paymentService;// 使用 @Qualifier 明确指定要注入的 Bean 名称@Autowired@Qualifier("alipayPayment") // 告诉Spring,我要用名为 "alipayPayment" 的PaymentServicepublic void setPaymentService(PaymentService paymentService) {this.paymentService = paymentService;}public void checkout() {paymentService.pay();}
    }

    解决3:

    @Component
    public class ShoppingCart {// 方式1:通过 name 属性指定@Resource(name = "alipayPayment")private PaymentService paymentService;// 方式2:如果不指定 name,则默认使用字段名 "paymentService" 去匹配// 但我们的Bean叫 "alipayPayment" 或 "creditCardPayment",所以这会失败// @Resource// private PaymentService alipayPayment; // 如果有一个Bean正好叫 "alipayPayment",这会成功public void checkout() {paymentService.pay();}
    }

http://www.dtcms.com/a/549160.html

相关文章:

  • 做进化树的在线网站东莞软文推广
  • 从零开始的云原生之旅(八):CronJob 实战定时清理任务
  • Python自动化测试 | 快速认识并了解pytest的基本使用
  • 网站备案增加域名天津招聘网人才招聘官网
  • 有什么做外贸的好网站直播网站app下载
  • seo网站改版方案怎么写如何做网站内部优化
  • 找婚庆公司去什么网站亚马逊雨林动物大全
  • 基于百度地铁 API 的长沙地铁站点详情查询与路线导航实践
  • C# 继承
  • Ubuntu 24.04 从源码编译 dcgm-exporter
  • 【软件测试基础】详解数据库核心操作:增删改查,及测试关注点
  • 建网站服务厦门市建设路网站
  • 大模型-多模态机器学习
  • JavaSE基础——第十三章 泛型
  • 从传统到未来:Java在现代开发中的新价值与进化方向
  • 设置linux公钥,私钥登录ssh登录
  • html的网站案例wordpress文章彩色字体
  • set/map刷力扣题/(哈希表+排序类型)仿函数和捕获-两种方法解决
  • 基于单片机与 DeepSeek-OCR 的盲人辅助阅读器设计与实现
  • 淘客网站cms怎么做肥乡专业做网站
  • 【底层机制】Android GC -- 为什么要有GC?GC的核心原理?理解GC的意义
  • 自动驾驶中的传感器技术76——Navigation(13)
  • 鸿蒙Flutter三方库适配指南: 05.使用Windows搭建开发环境
  • 律所网站建设方案书怎么写网站制作排名优化
  • 谷歌网站排名搭建一个平台要多少钱
  • 使用Node.js连接 OPC UA Server
  • h5游戏免费下载:保护堆芯
  • 怎么看网站关键词排名恩施网站制作
  • Jenkins 持续集成与部署
  • 企业查询网站有哪些深圳工业产品设计公司