P75分层解耦-IOCDI详解

news2024/9/20 16:27:17

一、分层解耦-三层架构

image-20230419213427158

image-20230419213600890

image-20230419220816149

image-20230419221507218

Dao层:数据访问

1、接口

package com.itheima.service;

import com.itheima.pojo.Emp;

import java.util.List;

/**
 * Description:
 * date: 2023/4/19 21:47
 *
 * @since JDK 11
 */
public interface EmpService {
// 获取员工列表数据
   public List<Emp> listEmp();
}

2、实现类

package com.itheima.service.impl;

import com.itheima.dao.EmpDao;
import com.itheima.dao.impl.EmpDaoA;
import com.itheima.pojo.Emp;
import com.itheima.service.EmpService;

import java.util.List;

/**
 * Description:
 * date: 2023/4/19 21:49
 *
 * @since JDK 11
 */
public class EmpServiceA implements EmpService {
// 创建一个Dao对象,面向接口。
   private EmpDao empDao = new EmpDaoA();

   public List<Emp> listEmp(){
//    1、调用Dao获取数据
      List<Emp> empList = empDao.listEmp();

//    2、对数据进行转换处理
      empList.stream().forEach(emp ->{
//       处理gender  1代表男性、2代表女性
         String gender = emp.getGender();
         if(gender.equals("1")){
            emp.setGender("男");
         }else {
            emp.setGender("女");
         }

//       处理job 1代表讲师、2代表班主任、3代表就业指导
         String job = emp.getJob();
         if(job.equals("1")){
            emp.setJob("讲师");
         }
         if(job.equals("2")){
            emp.setJob("班主任");
         }
         if(job.equals("3")){
            emp.setJob("就业指导");
         }
      });
      return empList;
   }
}

Service层:逻辑处理

1、接口

package com.itheima.service;

import com.itheima.pojo.Emp;

import java.util.List;

/**
 * Description:
 * date: 2023/4/19 21:47
 *
 * @since JDK 11
 */
public interface EmpService {
// 获取员工列表数据
   public List<Emp> listEmp();
}

2、实现类

package com.itheima.service.impl;

import com.itheima.dao.EmpDao;
import com.itheima.dao.impl.EmpDaoA;
import com.itheima.pojo.Emp;
import com.itheima.service.EmpService;

import java.util.List;

/**
 * Description:
 * date: 2023/4/19 21:49
 *
 * @since JDK 11
 */
public class EmpServiceA implements EmpService {
// 创建一个Dao对象,面向接口。
   private EmpDao empDao = new EmpDaoA();

   public List<Emp> listEmp(){
//    1、调用Dao获取数据
      List<Emp> empList = empDao.listEmp();

//    2、对数据进行转换处理
      empList.stream().forEach(emp ->{
//       处理gender  1代表男性、2代表女性
         String gender = emp.getGender();
         if(gender.equals("1")){
            emp.setGender("男");
         }else {
            emp.setGender("女");
         }

//       处理job 1代表讲师、2代表班主任、3代表就业指导
         String job = emp.getJob();
         if(job.equals("1")){
            emp.setJob("讲师");
         }
         if(job.equals("2")){
            emp.setJob("班主任");
         }
         if(job.equals("3")){
            emp.setJob("就业指导");
         }
      });
      return empList;
   }
}

controller层:接收请求,响应数据

1、代码

package com.itheima.controller;

import com.itheima.pojo.Emp;
import com.itheima.pojo.Result;
import com.itheima.service.EmpService;
import com.itheima.service.impl.EmpServiceA;
import com.itheima.utils.XmlParserUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * Description:
 * date: 2023/4/19 20:03
 *
 * @since JDK 11
 */
@RestController
public class EmpController {
// 定义面向接口的对象
   private EmpService empService = new EmpServiceA();

   @RequestMapping("/listEmp")
   public Result listEmp() {

//     1、调用service,获取数据
      List<Emp> empList = empService.listEmp();
//    2、响应数据
      return Result.success(empList);
   }



      /*//      1、加载并解析emp.xml
//        动态加载文件路径。切记不能模块路径不能带空格!!!不能有中文
      String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();
//    String file = "D:/intellij java/itheima_web_project/springboot-web-req-resp/src/main/resources/emp.xml";
      List<Emp> empList = XmlParserUtils.parse(file,Emp.class);
//    2、对数据进行转换处理
      empList.stream().forEach(emp ->{
//       处理gender  1代表男性、2代表女性
         String gender = emp.getGender();
         if(gender.equals("1")){
            emp.setGender("男");
         }else {
            emp.setGender("女");
         }

//       处理job 1代表讲师、2代表班主任、3代表就业指导
         String job = emp.getJob();
         if(job.equals("1")){
            emp.setJob("讲师");
         }
         if(job.equals("2")){
            emp.setJob("班主任");
         }
         if(job.equals("3")){
            emp.setJob("就业指导");
         }
      });*/

}

二、分层解耦

在这里插入图片描述

image-20230420204616762

image-20230420205510076

三、IOC & DI入门

image-20230420210805638

image-20230420210833857

image-20230420210901215

image-20230420211014422

image-20230420211021038

image-20230420211026942

将service的实现类A的注解@Component注释掉

image-20230420211441223

新建一个实现类B,添加注解@Compentent

这样就切换为实现类B了

image-20230420211733495

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mfuPr7l4-1682001792346)(…/…/…/AppData/Roaming/Typora/typora-user-images/image-20230420211746353.png)]

四、IOC详解

image-20230420212230211

image-20230420214215443

image-20230420214223601

image-20230420214331081

image-20230420214801755

image-20230420215606381

小结

image-20230420215637596

五、DI详解

image-20230420220750469

@Autowired默认是按照类型进行自动装配的,如果存在多个相同类型的bean,就会出错,我们需要调整bean的优先级

image-20230420221723036

image-20230420221913408

image-20230420221921085

在EmpServiceB.java添加了注解@Primary,在Controller中注入的就是EmpServiceB

image-20230420222316547

在EmpController中添加了注解@Qualifier

image-20230420223404619

image-20230420223345618

在EmpController中添加了注解@Resource

image-20230420223606672

小结

image-20230420223628566

注意bean的名称是类名,第一个字母小写

@Resource和@AutoWired的区别(面试题)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/441107.html

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

相关文章

RabbitMQ·入门·壹

文章目录 1 MQ思想1.1 相关概念&#xff1a;同步、异步通讯1.1.1 同步通讯1.1.2 异步通讯 1.2 MQ思想概述1.2.1 1 MQ思想 1.1 相关概念&#xff1a;同步、异步通讯 通讯方式举例优势劣势同步通讯就像打电话&#xff0c;需要实时响应。打电话可以立即得到响应。不能跟多人同时…

垃圾回收相关算法

标记阶段的算法 垃圾标记阶段&#xff1a;对象存货判断 在堆里存放着几乎所有的Java对象实例&#xff0c;在GC执行垃圾回收之前&#xff0c;首先需要区分出内存中哪些是存活对象&#xff0c;哪些是己经死亡的对象。只有被标记为己经死亡的对象&#xff0c;GC才会在执行垃圾回…

AutoGPT 环境搭建教程

文章目录 前言一、注册OpenAI和Pinecone的账号&#xff0c;并获取key二、下载Git和Python3&#xff08;自己网上搜&#xff0c;无脑安装&#xff09;![在这里插入图片描述](https://img-blog.csdnimg.cn/95bafd5ebe9d468cbceeacbfc0cb939b.png)三、进入GitHub&#xff0c;安装A…

Flowable从入门到源码分析

什么是工作流&#xff1f; 工作流&#xff0c;是把业务之间的各个步骤以及规则进行抽象和概括性的描述。使用特定的语言为业务流程建模&#xff0c;让其运行在计算机上&#xff0c;并让计算机进行计算和推动。 工作流解决的痛点在于&#xff0c;解除业务宏观流程和微观逻辑的…

【Linux】基础IO,详解系统文件IO

目录 C语言文件操作简单回顾 C语言相关文件接口汇总 默认打开的三个流 系统文件I/O open open的第一个参数 open的第二个参数 open的第三个参数 open的返回值 close write read 文件描述符 什么是文件描述符 文件描述符分配规则 重定向 重定向的本质 输出重定…

ETCD(一)简介

1. ETCD是什么 etcd 是一个分布式键值对存储&#xff0c;设计用来可靠而快速的保存关键数据并提供访问。和数据库一样都是用来存数据的&#xff0c;但是etcd有自己的特点&#xff0c;因此有自己的使用场景。 2. etcd 特点 完全复制&#xff0c;集群中的每个节点均拥有全量数…

跌倒检测和识别2:YOLOv5实现跌倒检测(含跌倒检测数据集和训练代码)

跌倒检测和识别2&#xff1a;YOLOv5实现跌倒检测(含跌倒检测数据集和训练代码) 目录 跌倒检测和识别2&#xff1a;YOLOv5实现跌倒检测(含跌倒检测数据集和训练代码) 1. 前言 2. 跌倒检测数据集说明 &#xff08;1&#xff09;跌倒检测数据集 &#xff08;2&#xff09;自定…

《离散数学导学》精炼——第10章(序列)

Learning never exhausts the mind. 文章目录 引言正文元包序列的定义序列与函数的关系空序列长度连接头尾运算符限制运算符逆置运算符单射序列 引言 笔者一直觉得在计算机这一学科的学习中&#xff0c;离散数学是极为重要的知识基础。离散化的思想体现在计算机学科的方方面面…

SpringDataJPA

介绍&#xff1a; spirng data jpa是spring提供的一套简化JPA开发的框架&#xff0c;按照约定好的规则进行【方法命名】去写dao层接口&#xff0c;就可以在不写接口实现的情况下&#xff0c;实现对数据库的访问和操作。同时提供了很多除了CRUD之外的功能&#xff0c;如分页、排…

剖析Linux内核—fork背后隐藏的技术细节

1、前言 全文分为两部分讲解&#xff1a;fork的内存管理部分和进程管理部分&#xff0c;内存管理主要讲解子进程如何构建自己的内存管理相关基础设施&#xff0c;父子进程如何共享地址空间的&#xff0c;写时复制如何发生&#xff0c;页表层面为我们做了哪些事情等等。而进程管…

Redis缓存雪崩、穿透、击穿

Redis缓存雪崩、穿透、击穿 解决方案正常的缓存流程Redis缓存雪崩Redis缓存雪崩解决方案 Redis缓存穿透Redis缓存穿透解决方案 Redis缓存击穿Redis缓存击穿解决方案 解决方案 布隆过滤器&#xff0c;分布式锁 正常的缓存流程 Redis缓存雪崩 Redis中的key大面积失效&#xff0…

BUUCTF-PWN-pwn1_sctf_2016

下载 放入 ubuntu里查信息 现在这些保护我都没有遇到 以后慢慢做应该是会遇到的 然后进行发现是32 所以我们记住 如果栈溢出漏洞 我们需要4个字节填满基地址 放入ida32 查看字符串 发现 cat flag 敏感字符串 然后我们就看引用 先记住地址 为 0x8048F0D 然后开始进去 发…

windows下网络聊天室项目(C++、SQLite、计算机网络)——思路+源码+解析

这里只是在windows系统下用C++做的简易聊天室,其界面比较low,不过该有的功能已基本实现。至于带界面的,QT里有封装好的QTcpSocket套接字,会在下一篇博客里予以介绍。主要的功能主要包含的功能有:查看当前在线人数、进入群聊界面、进入私聊界面、查看聊天记录、文件传输、更…

【Python小程序】纪念日礼物|恋爱一周年,送媳妇儿什么礼物浪漫又有惊喜?一键收藏,过节再也不用绞尽脑汁啦~(特别的礼物赠送)

前言 有些日子不可懒&#xff0c;指的就是纪念日。不同阶段过纪念日&#xff0c;也是不同的心境。 ——偷偷告诉你 所有文章完整的素材源码都在&#x1f447;&#x1f447; 粉丝白嫖源码福利&#xff0c;请移步至CSDN社区或文末公众hao即可免费。 作为一个编程博主&#xff0c…

爬虫学习 例子

以新能源网为例 【10-实战课】从源码获取豆瓣电影TOP250_哔哩哔哩_bilibili 1.查看网站结构 可见结构比较简单&#xff0c;直接循环爬取即可 2.代码&#xff08;无数据存储&#xff09; import requests from bs4 import BeautifulSoup headers {"User-Agent":&…

追梦之旅【数据结构篇】——看看小白试如何利用C语言“痛”撕堆排序

追梦之旅【数据结构篇】——看看小白试如何利用C语言“痛”撕堆排序 ~&#x1f60e; 前言&#x1f64c;堆的应用 —— 堆排序算法&#xff1a;堆排序算法源代码分享运行结果测试截图&#xff1a; 总结撒花&#x1f49e; &#x1f60e;博客昵称&#xff1a;博客小梦 &#x1f60…

【菜鸡读论文】Cross-domain Named Entity Recognition via Graph Matching

【菜鸡读论文】Cross-domain Named Entity Recognition via Graph Matching 最近到了研一下学期&#xff0c;很多身边的同学也开始有了成果&#xff0c;但本菜鸡一点成果都没有【大哭】所以也没什么好写的。虽然菜鸡口头上不说&#xff0c;但内心也感受到非常之焦虑。最近读论…

Linux 触摸屏 (IIC驱动详解)

前言&#xff1a; 本文使用触摸屏iic驱动&#xff0c;驱动编写中要使用总线&#xff0c;设备&#xff0c;驱动分层的思想&#xff0c;IIC总线&#xff0c;触摸屏驱动&#xff0c;触摸屏设备&#xff0c; IIC总线驱动 一般 SOC 的 I2C 总线驱动都是由半导体厂商编写的&…

使用SeaFile搭建私有云盘并公网访问【cpolar内网穿透】

文章目录 1. 前言2. SeaFile云盘设置2.1 Owncould的安装环境设置2.2 SeaFile下载安装2.3 SeaFile的配置 3. cpolar内网穿透3.1 Cpolar下载安装3.2 Cpolar的注册3.3 Cpolar云端设置3.4 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 现在我们身边的只能设备越来越多&#xff…

20230420使用逻辑分析仪测量摄像头的PAG7920的时钟信号

20230420使用逻辑分析仪测量摄像头的PAG7920的时钟信号 2023/4/20 19:14 在CV1826平台&#xff1a; 1、vsync信号&#xff1a;刷新率120HZ PAG7920LT: Ultra-Low Power Global Shutter Image Sensor Max. Frame Rate 180 FPS 20KSa/20KHZ 2、href行同步信号&#xff1a;KHZ级别…