【Spring】 Spring中的IoC(控制反转)

在这里插入图片描述
以往在定义业务层实现时,在指定具体地Dao时候需要具体地定义出其实现:

public class BookServiceImpl implements BookService{private BookDao bookDao = new BookDaoImpl();public void save(){bookDao.save()}
}
public class BookDaoImpl implements BookDao {public void save(){System.out.println("book dao save...");}
}

但是当我们想新定义一个实现方法的时候,例如:

public class BookDaoImpl2 implements BookDao {public void save(){System.out.println("book dao save...2");}
}

我们就要修改BookServiceImpl类,将里面的private BookDao bookDao = new BookDaoImpl()修改为private BookDao bookDao = new BookDaoImpl2(),这带来如下所示的问题:耦合度偏高,所以想要使用IoC,将对象创建控制权由程序内部转移到外部
在这里插入图片描述
从而,在定义BookServiceImpl中的bookDao的时候,就不需要在进行new…进而修改很多的代码
Spring实现IoC的方式如最上面的图,这里给出一个IoC的案例,手动配置Spring中的IoC,做法如下:

  1. pom.xml中加入dependency,刷新maven:
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId>
</dependency>
  1. 在resource下创建Spring config文件配置bean:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--1. 导入spring的坐标spring-context--><!--2. 配置bean--><!--bean标签标示配置beanid属性标示给bean起名字class属性标示给bean定义的类型--><bean id="bookDao" class="com.example.demo231116.dao.impl.BookDaoImpl" /><bean id="bookService" class="com.example.demo231116.service.impl.BookServiceImpl" />
</beans>
  1. 获取IoC容器和bean:
public class Demo231116Application2 {public static void main(String[] args) {// 3. 获取IoC容器ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");// 4. 获取bean
//        BookDao bookDao = (BookDao) ctx.getBean("bookDao");
//        bookDao.save();BookService bookService = (BookService) ctx.getBean("bookService");bookService.save();}
}

这里getBean()中的参数就是在xml文件中配置的bean的id,配置中直接指向对应的类
所以自然而然也可以知道,我们不可以定义相同id指向不同的类,这是不合法的

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

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

相关文章

Excel处理库openpyxl的使用

读取工作表 from openpyxl import load_workbook wbload_workbook("学生成绩表.xlsx") wb.get_sheet_names() a_sheetwb.get_sheet_by_name(计算机应用3班) print(a_sheet.title) b_sheetwb.active print("激活的sheet:{}".format(b_sheet)) #获取单个单元…

只有开源才能拯救AI

导语 | 随着 AI 技术的蓬勃发展&#xff0c;大模型的开源化正成为人工智能领域的新潮流&#xff0c;但同时引发的伦理和安全风险也饱受大家关注&#xff0c;如何把握平衡其中的尺度成为开源的一大难题。我们又应该如何有效进行开源治理&#xff1f;未来将走向何方&#xff1f;今…

二叉树题目:统计二叉树中好结点的数目

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;统计二叉树中好结点的数目 出处&#xff1a;1448. 统计二叉树中好结点的数目 难度 5 级 题目描述 要求 给定一…

IEEE Standard for SystemVerilog—Chapter14. Clocking blocks

14.1 General This clause describes the following: — Clocking block declarations(时钟块声明) — Input and output skews(输入和输出偏斜) — Clocking block signal events(时钟块信号事件) — Cycle delays(周期延迟) — Synchronous events(同步事件) — Synchronous…

Nginx静态资源部署之响应内容部署

文章目录 Nginx静态资源概述Nginx静态资源的配置指令listen指令server_name指令匹配执行顺序 location指令设置请求资源的目录root / aliasindex指令error_page指令 Nginx静态资源概述 Nginx处理静态资源的内容&#xff0c;我们需要考虑下面这几个问题&#xff1a; &#xff…

1700亿烧光,利润暴跌78%!外媒:中芯国际不是麒麟9000S的代工厂

作为芯片代工领域的领导者&#xff0c;台积电在全球半导体市场上占据着重要的地位。然而&#xff0c;由于美国对华为的制裁&#xff0c;台积电关闭了对华为麒麟芯片的代工&#xff0c;这也引发了外界对于芯片代工模式的讨论。与此同时&#xff0c;中芯国际作为大陆规模最大、技…

计算机网络专栏 学习导航or使用说明

计算机网络各章笔记 计算机网络_第一章_计算机网络的概述 计算机网络_第二章_物理层 计算机网络_第三章_数据链路层 计算机网络_第四章网络层_网络层概述_网际协议IP 计算机网络各章习题 计算机网络第一章习题_网络概述 计算机网络第二章习题_物理层 计算机网络第三章习…

能够解决网站被攻击的云服务厂商

在当今数字化时代&#xff0c;网站被攻击已成为一个严峻的挑战。在这样的情况下&#xff0c;云服务机构和CDN&#xff08;内容分发网络&#xff09;发挥着至关重要的作用&#xff0c;它们为网站提供了有效的保护手段。本文将介绍网站被攻击时可以求助的云服务机构&#xff0c;并…

Ubuntu22.04离线安装uwsgi问题记录

GCC4.8安装 1、报错信息1&#xff1a; 由于缺少gcc4.8环境导致的无法安装uwsgi 解决方案&#xff1a; 离线安装GCC4.8环境, GCC4.8.5离线安装步骤如下&#xff1a; 1、下载gcc的离线安装包及其依赖包&#xff0c;链接如下&#xff1a; https://download.csdn.net/download/…

idea运行项目之后一直卡在Writing classes… 解决方案

最近遇到idea里直接运行一个Spring boot项目后&#xff0c;idea一直慢悠悠的parsing java&#xff0c;然后就writing classes&#xff0c;然后就一直卡着不动了&#xff0c;运气好10几分钟能把项目启动起来。 多年的摸鱼经验告诉我&#xff0c;事出反常必有妖&#xff0c;赶紧…

Adam算法

一、Adam算法的原理 Adam算法结合了动量梯度下降法和RMSProp算法的思想&#xff0c;采用自适应学习率和二阶矩估计来更新模型参数。下面我们来详细介绍Adam算法的工作原理。 动量梯度下降法&#xff1a; 动量梯度下降法引入了动量的概念&#xff0c;通过累积过去梯度的移动平…

35、Flink 的 Formats 之CSV 和 JSON Format

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

使用.net 构建 Elsa Workflow

对接过蓝凌OA 也基于泛微OA数据库原型重新研发上线过产品&#xff0c;自研的开源的也上线过 每个公司对OA流程引擎介绍 都不一样的&#xff0c; 比如Elsa 这款微软MVP开源组件&#xff0c;基于跨平台开发的技术含量高&#xff0c;专门做OA的同行推过对应文章。 直接看怎么用吧。…

DeepStream--测试代码

测试BufSurface分配 #include <cstdio> #include <cuda_runtime_api.h> #include <nvbufsurface.h> int main() {NvBufSurface* hst_surf nullptr;NvBufSurfaceCreateParams buf_params {0};int status -1;buf_params.width 1920;buf_params.height 1…

新版本!飞凌嵌入式RK3568系列开发板全面支持Debian 11系统

飞凌嵌入式OK3568-C/OK3568J-C开发板现已全面支持Debian 11系统&#xff0c;新系统的加持能为用户提供主控新选择&#xff0c;并为开发者带来更多开发便利&#xff01; Debian系统作为一种广受欢迎和信赖的开源操作系统&#xff0c;以其稳定性、可靠性和开放性而闻名&#xff0…

MySQL(16):变量、流程控制与游标

变量 在MySQL数据库的存储过程和函数中&#xff0c;可以使用变量来存储查询或计算的中间结果数据&#xff0c;或者输出最终的结果数据。 在 MySQL 数据库中&#xff0c;变量分为 系统变量 以及 用户自定义变量 。 系统变量 变量由系统定义&#xff0c;不是用户定义&#xff…

centos搭建docker镜像Harbor仓库的简明方法

在kubernetes集群中如果要部署springcloud这样的应用&#xff0c;就必须有一个自建的docker镜像中心仓库。 它的目的有两点&#xff1a; 1. 镜像拉取速度快 2. 开发好维护 而Harbor是一个非常好用的docker本地仓库 所以本篇文章来讲讲如何在部署Harbor仓库 首先系统版本最…

前端实现RSA非对称加密及生成RSA公私密钥

前端实现RSA非对称加密 RSA简介安装jsencryptRSA加密RSA解密如何生成公私秘钥&#xff08;windows&#xff09; RSA简介 RSA用于保密性时&#xff0c;就是公钥加密&#xff0c;私钥解密。 因为公钥是可以公开了&#xff0c; 那么任何人都可以使用公钥对信息进行加密&#xff0…

Python 获取当前容器 CPU 负载和内存

Python 获取当前容器 CPU 负载和内存 引言 在容器化的环境中&#xff0c;了解容器的 CPU 负载和内存使用情况是非常重要的。本文将教会你如何使用 Python 来获取当前容器的 CPU 负载和内存使用情况。 整体流程 以下是获取当前容器 CPU 负载和内存的整体流程&#xff1a; jour…

npm封装插件打包上传后图片资源错误

问题&#xff1a; npm封装插件&#xff1a;封装的组件页面涉及使用图片资源&#xff0c;在封装的项目里调用图片显示正常&#xff1b;但是打包上传后&#xff0c;其他项目引入使用报错找不到图片资源&#xff1b;图片路径也不对 获取图片的base64方法 解决方案&#xff1a; 将…