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

embedded/2024/11/22 10:09:47/

目录

详细参考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.ppmy.cn/embedded/139589.html

相关文章

鸿蒙学习高效开发与测试-ArkUI 框架(2)

文章目录 1、声明式开发范式2、类 Web 开发范式3、可视可说 ArkUI 是鸿蒙生态原生的 UI 开发框架。主体结构如下图所示: ArkUI 框架提供给开发者两种开发方式:基于 ArkTS 的声明式开发范式和基于 JS 扩展的类 Web 开发范式。声明式开发范式更加简洁高效…

贴代码框架PasteForm特性介绍之select,selects,lselect和reload

简介 PasteForm是贴代码推出的 “新一代CRUD” ,基于ABPvNext,目的是通过对Dto的特性的标注,从而实现管理端的统一UI,借助于配套的PasteBuilder代码生成器,你可以快速的为自己的项目构建后台管理端!目前管…

详解Rust的数据类型和语法

文章目录 基本数据类型复杂数据类型字符串基本语法 Rust是一种强调安全性和性能的系统编程语言。它的设计目标之一是防止内存安全错误同时提供丰富的功能和灵活的语法。下面介绍一下Rust语言的基本数据类型和语法。 基本数据类型 1.整数类型 有符号整数: i8, i16, i32, i64, i…

设计模式:4、命令模式(双重委托)

目录 0、定义 1、命令模式包括四种角色 2、命令模式的UML类图 3、代码示例 0、定义 将一个请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 1、命令模式包括四种角色 接…

【Docker容器】一、一文了解docker

1、什么是docker? 1.1 docker概念 Docker是一种容器化平台,通过使用容器技术,Docker允许开发人员将应用程序和其依赖项打包到一个独立的、可移植的容器中。每个容器具有自己的文件系统、环境变量和资源隔离,从而使应用程序可以在…

解决复杂查询难题:如何通过 Self-querying Prompting 提高 RAG 系统效率?

在现代自然语言处理(NLP)领域,检索增强生成(RAG)系统因其能够结合外部知识库和大语言模型的强大生成能力,成为了提升信息检索质量的主流解决方案之一。然而,传统的 RAG 流程存在诸多挑战&#x…

Matlab深度学习(一)——如何构建一个卷积神经网络

1.1 CNN的核心 —— 卷积 我们以二维滑动卷积着重说明。与我们的滑动窗异常值检测类似,但滑动卷积涉及三个矩阵:第一个矩阵通常尺寸大且固定不动,在这称之为“输入矩阵”;第二个矩阵尺寸小,在输入矩阵上以从左到右&…

韩顺平 一周学会Linux | 第9章 Linux 实操篇-实用指令

一、指定运行级别 二、找回 Root 密码 三、帮助指令 四、文件目录类 五、时间日期类 1. date 指令-显示当前日期 date 功能描述:显示当前时间date %Y 功能描述&…