(javaweb)分层解耦

news2024/9/22 8:46:10

目录

一.三层架构

二.分层解耦

三.IOC&DI入门

四.IOC详解

五. DI详解


 

一.三层架构

复用性差,难以维护和管理 

前端发起请求,先会到达controller,再调用service进行逻辑处理,逻辑处理的前提是先拿到数据,到dao层,再去操作文件中的数据。将数据拿到,再返回给service,service进行逻辑处理,返回给controller进行响应数据给前端。

package com.itheima.controller;

import com.itheima.Util.XmlParserUtils;
import com.itheima.pojo.Emp;
import com.itheima.pojo.Result;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class Empcontroller {
    @RequestMapping("/listEmp")
    public Result list(){
        //加载并解析emp.xml  并且封装到集合当中    dao层
        String file=this.getClass().getClassLoader().getResource("emp.xml").getFile();
        System.out.println(file);
        List<Emp> empList = XmlParserUtils.parse(file, Emp.class);

        //对数据进行转换处理   service层
        //1.处理gender
        empList.stream().forEach(emp -> {
            String gender=emp.getGender();
            if("1".equals(gender)){
                emp.setGender("男");
            } else if ("2".equals(gender)) {
                emp.setGender("女");
            }
            //2.处理job
            String job=emp.getJob();
            if ("1".equals(job)){
                emp.setJob("讲师");
            }else if ("2".equals(job)){
                emp.setJob("班主任");
            } else if ("3".equals(job)) {
                emp.setJob("就业指导");
            }
        });




        //3.响应数据   controller层
        return Result.success(empList);
    }
}

先定义dao的接口,增强程序的灵活性和拓展性

 

三层架构:便于维护 方便架构 复用性强

二.分层解耦

 解耦:解除耦合

高内聚:将自己相关的内容放一块,无关的不写    依赖程度越高,耦合程度越高

设置controller要创建service类---耦合了

设计原则:高内聚低耦合(高内聚:模块内部之间的功能越紧密越好 低耦合:尽可能去降低模块与模块之间,层与层之间的关联)最好能做到解除耦合:层与层之间没有依赖(灵活性可扩展性提高)

 容器:IOC容器或者叫spring容器

容器中创建的对象:bean对象

三.IOC&DI入门

1.将new出的对象删除--空指针异常

IOC与DI共同完成业务解耦操作

控制反转:

依赖注入: 

四.IOC详解

 IOC控制反转--将对象的使用权交给ioc容器,由ioc容器创建和管理这些对象

@Conponent--声明bean对象----------衍生出三个注解

在项目开发当中,某一个类不能规整到那三层里面,若还想将类交给ioc容器管理,就使用conponent注解

value属性来声明bean的名字-------首字母小写--bean的名字

是默认的bean的名字

一般不用指定 采用默认的名字即可

五. DI详解

ioc容器要为应用程序提供运行时所依赖的资源  资源--就是对象

primary--让当前的bean生效

​​​​​​​

 

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

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

相关文章

模拟电子技术(上海交大 郑益慧)

概述 深入学习基础器件、然后基于基础器件做应用电路设计, 然后做放大电路设计,在这做多级放大电路 最后 构成了集成放大器 改善电路性能、让电路稳定,最终要的思想,就是引入反馈 如何学习 多练习、多实践增加感性(sumulink) 仿真 本征半导体与杂质半导体 二极管 单向导…

Java Facade 模式(外观模式)增强您的架构

通过我们的深入解释和实际示例揭示 Java Facade 模式的简单性 - 简化您的代码并增强您的架构。 您是否厌倦了让您头疼的乱七八糟的代码&#xff1f;您是否在为难以操作和维护的复杂软件而苦恼&#xff1f;那么让我们来谈谈外观 — — 不&#xff0c;不是建筑物的正面&#xff0…

Ceph分布式存储系统的搭建与使用

目录 一. 环境准备 二. 安装Docker 三. admin节点安装cephadm 四. admin节点给另外四个主机导入镜像 五. 向集群中添加节点 六. Ceph使用 列出可用设备 清除设备数据---针对有数据的设备 检查 OSD 状态 Ceph 集群中添加一个新的 OSD 查看集群的健康状态 指定MDS 列…

Javascript 基本引用类型

思维导图 Javascript基本引用类型思维导图 1:date的简单使用 let date new Date() // 获取当前的时间 年月日时分秒 获取时间 getTime() // 返回日期的毫秒表示&#xff1b;与 valueOf()相同 getFullYear() // 返回 4 位数年&#xff08;即 2019 而不是 19&#xff09; ge…

SD-WAN企业组网:与传统组网有何不同?

很多企业已经尝试过使用SD-WAN来进行组网。SD-WAN代表着一种新兴的网络连接技术&#xff0c;与传统的网络架构相比&#xff0c;它在许多方面都有明显的不同。 SD-WAN基于软件定义网络&#xff08;SDN&#xff09;的概念&#xff0c;提供集中化的网络控制和智能优化&#xff0c;…

软考:软件设计师 — 13.数据结构

十三. 数据结构 数据结构部分也可参考文章&#xff1a;Java数据结构知识点 — 5种常见数据结构 1. 线性结构 &#xff08;1&#xff09;线性表 顺序表 线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的数据元素&#xff0c;从而使得逻辑上相邻的两个元素…

仿RabbiteMq简易消息队列基础篇(future操作实现异步线程池)

TOC 介绍 std::future 是C11标准库中的一个模板类&#xff0c;他表示一个异步操作的结果&#xff0c;当我们在多线程编程中使用异步任务时&#xff0c;std::future可以帮助我们在需要的时候&#xff0c;获取任务的执行结果&#xff0c;std::future 的一个重要特性是能…

lvm知识终结

、什么是 LVM LVM 是 Linux 下对磁盘分区进行管理的一种工具&#xff0c;适合管理大存储设备&#xff0c;并允许用户动态调整文件系统的大小 lvm 常用的命令 功能 PV 管理命令 VG 管理命令 LV 管理命令 scan 扫描 pvscan vgscan lvscan create 创建 pvcreate v…

水仙花语:花中情诗,心灵低语

一、水仙花语的丰富内涵 水仙花的花语丰富多样&#xff0c;其中“纯洁”是其最为显著的象征之一。水仙花洁白无瑕的花瓣&#xff0c;宛如纯洁无暇的心灵&#xff0c;给人以清新、高雅之感。这种纯洁不仅体现在花朵的外观上&#xff0c;更蕴含着一种纯净、美好的精神内涵&#x…

【JS逆向学习】AES加密文本如何在python中进行调用js解密

对于上边的图片我们用F12找到我们就发现一个无限循环debugger , 我的解决方案是关闭调试 在一个currentitems中发现全是加密的数据 我通过ctrl + shift +f 搜索AES P 这就是解密的js函数,存到js中,进行处理 const crypto = require(crypto) var CryptoJS = require(crypt…

2.7单窗口中显示多幅图像

目录 1.实验原理 2.实验代码 3.运行结果 1.实验原理 在Opencv中&#xff0c;我们可以综合利用坐标变换与Rect区域提取来实现单窗口显示多幅图像。首先根据输入图像个数与尺寸确定输入源图像小窗口的构成形态&#xff0c;然后设定每个图像小窗口的具体构成&#xff0c;包括边…

超级外链工具,可发9600条优质外链

超级外链工具&#xff0c;是一款在线全自动化发外链的推广工具。使用本工具可免费为网站在线批量增加外链&#xff0c;大大提高外链发布工作效率&#xff0c;是广大草根站长们必备的站长工具。 外链工具只是网站推广的辅助工具&#xff0c;一般适用于短时间内无法建设大量外链…

stm32入门学习16-闪存

&#xff08;一&#xff09;闪存 在之前的学习中&#xff0c;已经学习过了W25Q64这个外挂闪存&#xff0c;在stm32内部也有一块闪存&#xff0c;其主要用于存放我们编译的代码&#xff0c;如果我们需要一些掉电不丢失的数据&#xff0c;但是又懒得外挂一块闪存&#xff0c;就可…

树莓派4b换源+安装neo4j知识图谱

烧录树莓派系统&#xff0c; ssh 1.在SD中的boot区中&#xff0c;新建两个文件ssh(没有任何后缀)和wpa_supplicant.conf。 2.往wpa_supplicant.conf中写入 countryCN ctrl_interfaceDIR/var/run/wpa_supplicant GROUPnetdev update_config1 network{ ssid“wifi账号” psk“…

VS Code 配置docker 管理员权限终端

问题描述 在容器中需要使用sudo或者su root时候&#xff0c;权限不够&#xff0c;被灵魂提问。 然而&#xff0c;镜像是官方发布的&#xff0c;翻遍了githubissues也没有找到password. 解决 Attach shell 在docker插件中&#xff0c;attach shell 可以直接获得shell。 所…

AI顾投高级策略之六:马丁格尔策略

作者&#xff1a;老余捞鱼 原创不易&#xff0c;转载请标明出处及原作者。 写在前面的话&#xff1a; 在投资世界中&#xff0c;隐藏着众多精妙的策略&#xff0c;其中一些历经时间的考验&#xff0c;被基金经理们广泛使用。今天&#xff0c;我们要探讨的是马丁格尔策略…

不依靠for循环,Python如何对列表进行去重并保留排列顺序

在python中&#xff0c;我们想要从列表中删除重复元素&#xff0c;并且保留去重之前的先后排列顺序。在这里&#xff0c;我们本文不谈论for循环&#xff0c;我们来谈论其他的更优方法——OrderedDict和set。 要知道&#xff0c;OrderedDict可以通过保留插入顺序来实现元素去重…

【面试题】接雨水

接雨水 仅学习 一、问题描述 二、解调思路 这个问题是一个典型的双指针问题&#xff0c;也称为"接雨水问题"。我们可以通过遍历数组两次来解决这个问题&#xff1a;一次从左到右&#xff0c;一次从右到左&#xff0c;分别记录每个位置左边和右边的最大高度。然后&…

springboot学校防疫物资管理平台的设计与实现boot--论文源码调试讲解

第2章 开发环境与技术 本章节对开发学校防疫物资管理平台管理系统需要搭建的开发环境&#xff0c;还有学校防疫物资管理平台管理系统开发中使用的编程技术等进行阐述。 2.1 Java语言 Java语言是当今为止依然在编程语言行业具有生命力的常青树之一。Java语言最原始的诞生&…