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.hqwc.cn/news/701270.html

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

相关文章

Transformer+Classification学习笔记

论文名称:An Image is Worth 16x16 Words:Transformers for Image Recognition at Scale [2112.11010] MPViT: Multi-Path Vision Transformer for Dense Prediction (arxiv.org) 参考博客与视频: Vision Transformer 超详细解读 (原理分析代码解读) …

H5 云商城 file.php 文件上传致RCE漏洞复现

0x01 产品简介 H5 云商城是一个基于 H5 技术的电子商务平台,旨在为用户提供方便快捷的在线购物体验。多平台适配:H5 云商城采用 H5 技术开发,具有良好的跨平台适配性。无论是在电脑、手机还是平板等设备上,用户都可以通过网页浏览器访问和使用云商城,无需安装额外的应用程…

WMS仓储管理系统如何让仓库管理有过程

在当今竞争激烈的商业环境中,WMS仓储管理系统的智能化与过程化管理显得尤为重要。一个具有过程管理的WMS仓储管理系统不仅能够帮助企业实时监控、分析和调度仓库作业,还能显著提升作业效率和成本控制能力。下面,我们就来深入探讨一下这种“有…

2024-05-10 Ubuntu上面使用libyuv,用于转换、缩放、旋转和其他操作YUV图像数据,测试实例使用I420ToRGB24

一、简介:libyuv 最初是由Google开发的,主要是为了支持WebRTC项目中的视频处理需求。用于处理YUV格式图像数据的开源库。它提供了一系列的函数,用于转换、缩放、旋转和其他操作YUV图像数据。 二、执行下面的命令下载和安装libyuv。 git clo…

windows 使用 workerman

简单示例 workerman从3.5.3版本开始已经能够同时支持linux系统和windows系统。 1、需要PHP>5.4,并配置好PHP的环境变量。 2、Windows版本的Workerman不依赖任何扩展。 3、安装使用以及使用限制这里。 4、由于Workerman在Windows下有诸多使用限制&#xff0c…

前端崽的java study笔记

文章目录 basic1、sprint boot概述2、sprint boot入门3、yml 配置信息书写和获取 持续更新ing~ basic 1、sprint boot概述 sprint boot特性: 起步依赖(maven坐标):解决配置繁琐的问题,只需要引入sprint boot起步依赖的…

能否直接上手 Qt ?——看完 C++ 课本后怎么做?

在开始前我有一些资料,是我根据网友给的问题精心整理了一份「Qt的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!如果你已经阅读了 C 课本,但仍然感到…

6、Qt—Log4Qt使用小记1

开发平台:Win10 64位 开发环境:Qt Creator 13.0.0 构建环境:Qt 5.15.2 MSVC2019 64位 一、Log4Qt简介 Log4Qt是使用Trolltech Qt Framework的Apache Software Foundation Log4j包的C 端口。它旨在供开源和商业Qt项目使用。所以 Log4Qt 是Apa…

(done) 关于 pytorch 代码里常出现的 batch_first 到底是啥?

参考文章:https://pytorch.org/docs/stable/generated/torch.nn.utils.rnn.pad_sequence.html 首先看参考文章里的解释,如下图 从文章描述来看,当 batch_first True 时,输出的张量的 size 是 B x T x *。当 batch_first False…

近屿OJAC的大模型工程师训练营——0基础人士加入AIGC领域的捷径!

近年来,随着数据快速积累、算力性能提升和算法效力增强,人工智能不仅能与人类进行互动,还可以写作、编曲、绘画、视频制作等。如近期爆火的文生视频模型Sora,首次由AI生成了长达1分钟的多镜头长视频,镜头堪比电影&…

计算机组成原理(超详解!!) 第八节 总线系统

1.总线的概念和结构形态 1.总线(BUS)的基本概念 是构成计算机系统的互联机构,是多个系统功能部件(运算器、控制器、存储器、输入/输出设备)之间进行数据传送的公共通路。 由传输信息的电路和管理信息传输的协议组成…

网络传输,请每次都开启 TCP_NODELAY

原文:Marc Brooker - 2024.05.09 (注:不必过于担心这个问题,大部分现代库,语言(如 Go),代理(如 Envoy),都默认设置了 TCP_NODELAY。如果遇到网络…