
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 { @Override public void pay() { System.out.println("Paying with credit card."); } } // 实现类2 @Component("alipayPayment") // 指定Bean的名称为 "alipayPayment" public class AlipayPaymentService implements PaymentService { @Override public void pay() { System.out.println("Paying with Alipay."); } }解决2:
-
@Component public class ShoppingCart { private PaymentService paymentService; // 使用 @Qualifier 明确指定要注入的 Bean 名称 @Autowired @Qualifier("alipayPayment") // 告诉Spring,我要用名为 "alipayPayment" 的PaymentService public 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(); } }
1034

被折叠的 条评论
为什么被折叠?



