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

SpringBoot,IOC,DI,分层解耦,统一响应

目录

详细参考day05 web请求

1、BS架构流程

2、@RequestParam注解 完成参数名和形参的映射

3、controller接收json对象,使用@RequestBody注解

4、@PathVariable注解传递路径参数

5、@ResponseBody(return 响应数据) 

      @RestController源码

6、统一响应结果

7、分层解耦

8、IOC和DI

控制反转代码示例:

IOC四类注解:

DI:@Autowired自动装配

@Primary @Qualifier @Resource


详细参考day05 web请求

1、BS架构流程

2、@RequestParam注解 完成参数名和形参的映射

 

3、controller接收json对象,使用@RequestBody注解

  4、@PathVariable注解传递路径参数

就是在@RequestMapping中加参数名比如{id}

5、@ResponseBody(return 响应数据) 

@RestController源码

6、统一响应结果

每个方法的返回值 从return  string/arr[]/student ------》 变成 return Result.success(list);  

//响应统一格式的结果
@RequestMapping("/getAddr")
public Result getAddr(){
Address addr = new Address();
addr.setProvince("广东");
addr.setCity("深圳");
return Result.success(addr);
}
public class Result {private Integer code;//响应码,1 代表成功; 0 代表失败private String msg; //响应码 描述字符串private Object data; //返回的数据public Result() { }public Result(Integer code, String msg, Object data) {this.code = code;this.msg = msg;this.data = data;}public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public Object getData() {return data;}public void setData(Object data) {this.data = data;}//增删改 成功响应(不需要给前端返回数据)public static Result success(){return new Result(1,"success",null);}//查询 成功响应(把查询结果做为返回数据响应给前端)public static Result success(Object data){return new Result(1,"success",data);}//失败响应public static Result error(String msg){return new Result(0,msg,null);}}

7、分层解耦

分层就是分成了controller层、service层,dao层

controller层负责:接收前端发送的请求,对请求进行处理,并响应数据(调用service层

service层:处理具体的业务逻辑(调用dao层

dao层负责:负责数据的访问操作,包含数据的增、删、改、查

service层和dao层都是面向接口编程的,目的是解耦(进一步解耦使用 控制反转和依赖注入)。

首先会定义一个接口层,然后再去实现这个接口。

        接口定义业务规则(比如需要哪些方法,需要哪些数据)

        实现类负责实现具体的业务逻辑 



我们发现在上面controller中我们定义的是一个service接口,然后new的是一个接口的实现类,赋值给接口,这是面向接口编程。但若是我们更换了业务逻辑,想要换一个实现类,如下所示,此时我们就要去修改controller中的代码,非常的不方便,所以我们要使用ioc和di解耦。

8、IOC和DI

IOC:叫做控制反转,核心就是我们不用手写代码创建对象,而是交给IOC容器创建

DI:叫做依赖注入,就是说代码运行需要什么对象时,我们不去创建,而是让IOC容器自己提供

IOC创建,管理的对象,叫做bean对象。

控制反转代码示例:

IOC四类注解:

IOC 容器中, 每一个Bean都有一个属于自己的名字 ,可以通过注解的 value 属性指定 bean 的名字。如果没有指定, 默认为类名首字母小写
使用四大注解声明的bean,要想生效,还需要被组件扫描注解@ComponentScan扫描
@ComponentScan注解虽然没有显式配置,但是实际上已经包含在了引导类声明注解
@SpringBootApplication 中, 默认扫描的范围是SpringBoot启动类所在包及其子包

DI:@Autowired自动装配

@Autowired 注解,默认是按照 类型 进行自动装配的(去IOC容器中找某个类型的对象,然后完成注入操作)
controller层需要service对象,就在代码内使用该注解,并定义一个service接口。
同dao。

@Primary @Qualifier @Resource

比如一个接口的两个实现类,由于自动装配找的接口对象,不使用额外注解就会报错。

@Primary 注解使用在接口的实现类中,service

@Qualifier使用在 调用者一级,比如controller,且必须和@Autowired一起使用,根据名字去找

@Resource注解和@Autowired注解是同级别的,只不过有区别

http://www.lryc.cn/news/488751.html

相关文章:

  • 目标驱动学习python动力
  • 力扣-Hot100-回溯【算法学习day.39】
  • 小熊派Nano接入华为云
  • 【linux硬件操作系统】计算机硬件常见硬件故障处理
  • 谈学生公寓安全用电系统的涉及方案
  • 自动语音识别(ASR)与文本转语音(TTS)技术的应用与发展
  • Go 语言数组
  • 13. 【.NET 8 实战--孢子记账--从单体到微服务】--简易权限--完善TODO标记的代码
  • 深入剖析Java内存管理:机制、优化与最佳实践
  • 【Amazon】亚马逊云科技Amazon DynamoDB 实践Amazon DynamoDB
  • Qt-常用的显示类控件
  • LabVIEW内燃机缸压采集与分析
  • 【Linux学习】【Ubuntu入门】1-7 ubuntu下磁盘管理
  • VScode clangd插件安装
  • 【机器学习】- L1L2 正则化操作
  • Logback实战指南:基础知识、实战应用及最佳实践全攻略
  • 基于python的机器学习(三)—— 关联规则与推荐算法
  • 【大模型】LLaMA: Open and Efficient Foundation Language Models
  • 模拟器多开限制ip,如何设置单窗口单ip,每个窗口ip不同
  • hive的存储格式
  • 鸿蒙学习高效开发与测试-应用程序框架(3)
  • 什么命令可以查看数据库中表的结构
  • django基于python 语言的酒店推荐系统
  • 【深度学习|onnx】往onnx中写入训练的超参或者类别等信息,并在推理时读取
  • WebSocket详解、WebSocket入门案例
  • 05_Spring JdbcTemplate
  • Bug:引入Feign后触发了2次、4次ContextRefreshedEvent
  • 最新‌VSCode保姆级安装教程(附安装包)
  • layui 表格点击编辑感觉很好用,实现方法如下
  • 三十一、构建完善微服务——API 网关