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

news2024/11/22 7:47:14

目录

详细参考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.coloradmin.cn/o/2245195.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux:confluence8.5.9的部署(下载+安装+pojie)离线部署全流程 遇到的问题

原文地址Linux:confluence8.5.9的部署(下载安装破ji)离线部署全流程_atlassian-agent-v1.3.1.zip-CSDN博客 背景:个人使用2核4g 内存扛不住 总是卡住,但是流程通了所以 直接公司开服务器干生产 个人是centos7 公司…

线程池的实现与应用

一、线程池 一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用&#xff0c…

.net 8使用hangfire实现库存同步任务

C# 使用HangFire 第一章:.net Framework 4.6 WebAPI 使用Hangfire 第二章:net 8使用hangfire实现库存同步任务 文章目录 C# 使用HangFire前言项目源码一、项目架构二、项目服务介绍HangFire服务结构解析HangfireCollectionExtensions 类ModelHangfireSettingsHttpAuthInfoUs…

EventListener与EventBus

EventListener JDK JDK1.1开始就提供EventListener,一个标记接口,源码如下: /*** A tagging interface that all event listener interfaces must extend.*/ public interface EventListener { }JDK提供的java.util.EventObject&#xff1…

优先级队列PriorityQueue(堆)

1. 优先级队列 队列是一种先进先出的数据结构,而如果我们操作的数据带有优先级,我们出队的时候就会先出队优先级最高的元素.比如打游戏的时候有人给你打电话,操作系统看来有俩个进程,优先会处理打电话. 主要功能 1> 返回最高优先级对象 2> 添加新的对象 2. 堆的概念 2.1 …

【AI】人工智能报告解读——中国人工智能的发展

自 2016 年 AlphaGo 与世界顶级围棋选手对战后,AI 概念和技术从此走入大众视野。2017 年,国务院颁布《新一代人工智能发展规划》,这是中国在人工智能领域第一个部署文件,确定了人工智能产业发展的总体思路、战略目标和任务。技术和…

Flutter:photo_view图片预览功能

导入SDK photo_view: ^0.15.0单张图片预览&#xff0c;支持放大缩小 import package:flutter/material.dart; import package:photo_view/photo_view.dart;... ...class _MyHomePageState extends State<MyHomePage>{overrideWidget build(BuildContext context) {return…

uni-app 修改复选框checkbox选中后背景和字体颜色

编写css&#xff08;注意&#xff1a;这个样式必须写在App.vue里&#xff09; /* 复选框 */ /* 复选框-圆角 */ checkbox.checkbox-round .wx-checkbox-input, checkbox.checkbox-round .uni-checkbox-input {border-radius: 100rpx; } /* 复选框-背景颜色 */ checkbox.checkb…

c++中mystring运算符重载

#include <iostream> #include <cstring>using namespace std;class mystring {char* buf; public:mystring(); //构造函数mystring(const char * str); //构造函数mystring(const mystring& str); //深拷贝函数void show(); //输出函数void setmystr(const my…

oracle数据恢复—通过拼接数据库碎片的方式恢复Oracle数据的案例

Oracle数据库故障&#xff1a; 存储掉盘超过上限&#xff0c;lun无法识别。管理员重组存储的位图信息并导出lun&#xff0c;发现linux操作系统上部署的oracle数据库中有上百个数据文件的大小变为0kb。数据库的大小缩水了80%以上。 取出&并分析oracle数据库的控制文件。重组…

SpringBoot中小企业人事管理系统:设计模式

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;中小企业人事管理系统当然也不能排除在外。中小企业人事管理系统是以实际运用为开发背景&#xff0c;运用软件工程原理和…

git分支合并某一次提交

1.A分支&#xff1a;使用git log --oneline查看需要合并的id 或者直接去Git仓库查看提交记录 2.B分支&#xff1a;git cherry-pick id 合并A分支的请求

NFS文件服务器

持久化存储&#xff1a;NFS 1 NFS 工作原理 NFS&#xff08;Network File System&#xff09;是一种分布式文件系统协议&#xff0c;它允许用户在网络上通过一个网络共享访问文件&#xff0c;就如同访问本地存储一样。NFS 工作时&#xff0c;服务端将文件系统中的一个或多个目…

Springboot 整合 Java DL4J 搭建智能问答系统

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

Android kotlin之配置kapt编译器插件

配置项目目录下的gradle/libs.versions.toml文件&#xff0c;添加kapt配置项&#xff1a; 在模块目录下build.gradle.kt中增加 plugins {alias(libs.plugins.android.application)alias(libs.plugins.jetbrains.kotlin.android)// 增加该行alias(libs.plugins.jetbrains.kotl…

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

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

详细教程-Linux上安装单机版的Hadoop

1、上传Hadoop安装包至linux并解压 tar -zxvf hadoop-2.6.0-cdh5.15.2.tar.gz 安装包&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1u59OLTJctKmm9YVWr_F-Cg 提取码&#xff1a;0pfj 2、配置免密码登录 生成秘钥&#xff1a; ssh-keygen -t rsa -P 将秘钥写入认…

短剧系统小程序开发产品设计实例解析

短剧系统小程序开发架构深度解析引言 随着数字娱乐市场的蓬勃发展&#xff0c;短剧因其紧凑的情节、创新的表现形式和便捷的观看体验&#xff0c;迅速吸引了大量观众的关注。作为承载短剧内容的重要平台&#xff0c;短剧系统小程序不仅需要在用户体验、内容管理等方面做到极致&…

STM32--JLINK下载问题记录

1.下载提示&#xff1a; 现象&#xff1a;keil下载&#xff0c;会提示如上信息&#xff1b; 使用segger jflash可以连接成功&#xff0c;但是下载程序会失败&#xff1b; 解决过程&#xff1a;尝试一边复位一边下载程序&#xff0c;一直失败&#xff1b;STM32CubeProgrammer也…

推荐算法(基于用户/物品的协同过滤算法)

1.1 推荐算法概述 信息过载的时代。信息消费者面临的问题是如何收集到自己感兴趣的信息。对于信息生产者来说&#xff0c;高效地把信息推送给感兴趣的信息消费者&#xff0c;而不是淹没在信息互联网的海洋之中&#xff0c;也非常困难。 如何从大量的数据信息中获取有价值的信息…