Web开发三层架构

##Controller Service Dao(mapper)

在这里插入图片描述

软件设计:高内聚 低耦合

Controller 调用Service, Service调用 DAO 模块之间耦合
在这里插入图片描述

如果要从EmpServiceA切换到EmpServiceB,Controller代码也要修改

new EmpServiceB
在这里插入图片描述

分层接耦

容器中放EmpServiceA, Controller需要对象去容器中找
如果要将实现类由EmpServiceA 切换为EmpServiceB,可以基于B对象在容器中创建一个对象,即使Service中实现类发生变化,Controller代码也不需要改动

在这里插入图片描述

1.对象怎么交给容器管理

①类交给IOC容器管理,在类上加注解 @Component
在这里插入图片描述

2.容器怎么为程序提供依赖的资源

②Controller需要 empservice对象,给empService加上@Autowired注解

在这里插入图片描述

在这里插入图片描述
此时如果要切换实现类:EmpServiceA 切换到EmpServiceB,将A上面的 //@Component注释掉就可以

保留EmpServiceB上的@Component

Java中的Bean

Controller Service Repository 将对象交给IOC容器管理,默认封装了Component注解

不能用上面三个注解标识,就交给Component,典型的使用场景是工具类

在这里插入图片描述

  • 申明Bean时候,可以通过注解中的value属性指定Bean的名字,没有指定Value属性,Bean名字默认类名首字母小写
  • 在这里插入图片描述

Bean的组件扫描

申明一个Bean,不一定会生效,设计到组件扫描的问题
在这里插入图片描述

在这里插入图片描述

启动类自动加上了组件扫描注解,默认扫描范围是启动类所在包及其子包,如果有些Bean不在这个目录下,启动会失败,b比如dao代码

在这里插入图片描述

在这里插入图片描述

解决方法:自己加上ComponentScan(不推荐)
推荐:将所写的代码全部放到启动类及其子包下面
在这里插入图片描述

依赖注入

  • ① AutoWired

有两个EmpService的Bean,EmpServiceA,EmpServiceB:使用哪个?
程序启动时就报错:

在这里插入图片描述

解决方法:

(1)@Primary 设置优先级,想要哪个Bean生效,就在哪个Bean上加@Primary
在这里插入图片描述

(2)@Autowired配合@Qualifier(“empServiceA”), 加上bean的名字,默认类名首字母小写

Autowired默认按照类型注入

在这里插入图片描述

@Resource默认按照名称注入

jdk提供的
在这里插入图片描述

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

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

相关文章

文本批量高效管理,一键删除前后第一行,轻松提升工作效率!

在信息爆炸的时代,文本处理成为我们日常生活和工作中不可或缺的一部分。然而,面对大量的文本数据,如何高效地进行批量管理,成为了许多人头疼的问题。今天,我们将向您介绍一种简单而高效的方法,让您轻松删除…

学习方法论

下面是我当时大一做的总结,可供参考: ㊗注意★ 以下所有方法都可以从知乎中找到具体描述,我只是把有用的给整合出来了。 学习方法本身: 上课听逻辑。老师是怎么由一个知识点讲到另一个知识点的,怎么把这些知识点串联…

【UE5.1 角色练习】01-使用小白人蓝图控制商城角色移动

目录 效果 步骤 一、导入资源 二、控制角色移动 三、更换角色移动动作 效果 步骤 一、导入资源 新建一个工程,然后在虚幻商城中将角色动画的相关资源加入工程,这里使用的是“动画初学者内容包”和“MCO Mocap Basics” 将我们要控制的角色添加进…

【使用Condition来模拟生产消费】

使用Condition来模拟生产消费 1. 关于ReentrantLock 和condition的认知?2.使用condition实现生产者-消费者1. 关于ReentrantLock 和condition的认知? /*Q: ReentrantLock是如何实现管理锁和线程的?A: ReentrantLock是并发包中 一个类,它实现了Lock接口,提供了比内置synch…

Elasticsearch:检索多向量文档中的原始信息

作者:来自 Elastic Gilad Gal Elasticsearch(从 8.11 版本及更高版本开始)支持单个字段中每个文档具有多个向量。 这样的文档可以通过文档的最相似向量的排名或者通过每个文档具有多个结果(可能在同一结果集中文档包含的每个向量…

搜索引擎的设计与实现(四)

目录 6 系统测试 6.1测试重要性 6.2测试用例 结 论 参 考 文 献 前面内容请移步 搜索引擎的设计与实现(三) 免费源代码&毕业设计论文 搜索引擎的设计与实现 6 系统测试 6.1测试重要性 该项目是在本地服务器上进行运行和调试,…

【从零开始学习Redis | 第十一篇】快速介绍Redis持久化策略

前言: Redis 作为一种快速、高效的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景。然而,由于其特性是基于内存的,一旦服务器进程退出,内存中的数据就会丢失。为了解决这一问题,Redis 提供了持久…

IT技术产品:开发者极为重要的思维习惯

1、特色内容预告 1、我用敏捷开发思维,提高工作效率。 2、我用代码批判思维,逐渐让自己的作品变得无可挑剔。 3、我是一个顶级程序员,是哪些重要的专业习惯,让我如此优秀? 2、可以免费获取到的IT资源 1、《软件工程&a…

paddle ocr 版面分析

教程 https://github.com/PaddlePaddle/PaddleOCR/blob/a4b7d3ba4a8333a23bab1fc1472aa18deec211d1/ppstructure/layout/README_ch.md 额外的模型,但是yolov2的模型缺少yml配置文件,找不到 https://github.com/PaddlePaddle/PaddleOCR/blob/main/ppstruc…

【嵌入式模块芯片开发】ADXL345的优化精确测量和角度计算(中断单次测量、卡尔曼滤波)

【嵌入式模块芯片开发】ADXL345的优化精确测量和角度计算(中断单次测量、卡尔曼滤波) 文章目录 ADXL345的一般读取方式ADXL345的中断读取方式(单次测量)角度计算卡尔曼滤波优化后完整代码附录:压缩字符串、大小端格式…

面向对象 04:三大特性之——封装,封装的含义和作用,以及在 Java 中的使用方式,附完整的测试案例代码

一、前言 记录时间 [2024-05-11] 系列文章简摘: 面向对象 01:Java 面向对象相关内容整体概述 面向对象 02:区分面向过程与面向对象,类和对象的关系 面向对象 03:类与对象的创建、初始化和使用,通过 new 关键…

@vueuse/core 常用方法

createGlobalState | VueUse中文文档 <template><div class"container"><div>{{ x }}-{{ y }}</div><div>{{ store }}</div><div><button click"addNum">add-{{ counter }}</button></div>…

计算机vcruntime140.dll找不到如何修复,分享5种靠谱的修复教程

当您在运行某个应用程序或游戏时遇到提示“找不到vcruntime140.dll”&#xff0c;这通常意味着系统中缺少了Visual C Redistributable for Visual Studio 2015或更高版本的一个重要组件。这个错误通常发生在运行某些程序时&#xff0c;系统无法找到所需的动态链接库文件。小编将…

【JAVA】数组的应用场景

1 保存数据 public static void main(String[] args) {int[] array {1, 2, 3};for(int i 0; i < array.length; i){System.out.println(array[i] " ");} } 2 作为函数的参数 1. 参数传基本数据类型 public static void main(String[] args) {int num 0;fu…

917.仅仅反转字母(leetcode)

给你一个字符串 s &#xff0c;根据下述规则反转字符串&#xff1a; 所有非英文字母保留在原有位置。所有英文字母&#xff08;小写或大写&#xff09;位置反转。 返回反转后的 s 。 示例 1&#xff1a; 输入&#xff1a;s "ab-cd" 输出&#xff1a;"dc-ba&quo…

手撸XXL-JOB(三)——本地定时任务管理平台

引言 在XXL-JOB中&#xff0c;有一个xxl-job-admin项目&#xff0c;这个就相当于定时任务的调度平台&#xff0c;我们参考XXL-JOB&#xff0c;也添加这么一个调度平台&#xff0c;由于篇幅有限&#xff0c;我们先实现一个本地的定时任务调度平台&#xff0c;至于如何调用远程的…

蓝桥杯备战13.赦免战俘

P5461 赦免战俘 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc.h> using namespace std; #define endl \n //#define int long long const int N 2e510; int n,p1,a[1050][1050]; void di(int x,int l,int q)//x是正方形边长&#xff0c;l、q是正方…

算法练习day8

反转字符串 代码随想录 0344.反转字符串 344. 反转字符串 - 力扣&#xff08;LeetCode&#xff09; &#xff08;用时&#xff1a;0.05小时&#xff09; 思路 这道题很简单也很经典。 字符串的反转方法有很多&#xff0c;我这里是用for循环通过数组长度和下标计算来交换。…

【小积累】@Qualifier注解

今天在看rabbitMQ的时候需要绑定交换机和队列&#xff0c;交换机和队列都已经注入到spring容器中&#xff0c;写了一个配置类&#xff0c;使用了bean注解注入的。所以这时候绑定的时候需要使用容器中的交换机和队列&#xff0c;必须要使用Qualifier去确定是容器中的哪个bean对象…

vue2 v-model 绑定不同的表单元素,绑定不同表单元素的属性

输入框 input:text --> value文本域 textarea --> value复选框 input:checkbox --> checked单选框 input:radio --> checked下拉菜单 select–> value 1、绑定输入框 input typetext / password / number <!--绑定的是 typetext / password 的 value值 --…